原码、反码、补码

2020-11-19  本文已影响0人  陈陈_04d0

二进制 1010 1001 十进制 169


手动推算

 Integer.toBinaryString(mCheckSum) //int转为二进制

原码:把最左边的一位腾出来表示正负,0 表示正数,1 表示负数

负数:  1010 1001

反码:正数的反码与其原码相同,负数的反码是符号位不变其他位取反   

负数: 1101 0110

补码:正数的补码与其原码相同,负数在反码的基础上 +1

负数:1101 0111

转换: 101 0111 16进制 57


代码方式计算

byte[] bytes = Convert.hexsStringToBytes("7F10020612");//转为数组

int mCheckSum = ~Convert.byteSum(bytes) +1;//求和反码

String.format("%04X", mCheckSum &0xFFFF) // 转为16进制补码

/**

* 十六进制String 转为byte 数组

* @param hexString 值

* @return

*/

public static byte[]hexsStringToBytes(String hexString) {

if (hexString ==null || hexString.equals("")) {

return new byte[1024];

    }

hexString = hexString.toUpperCase();

    int length = hexString.length() /2;

    char[] hexChars = hexString.toCharArray();

    byte[] d =new byte[length];

    for (int i =0; i < length; i++) {

int pos = i *2;

        d[i] = (byte) (charToByte(hexChars[pos]) <<4 |charToByte(hexChars[pos +1]));

    }

return d;

}

c

上一篇 下一篇

猜你喜欢

热点阅读