首先int类型是4个字节,一个字节是8位
假如现在有一个负数-5
首先列出5的二进制
0000 0000 0000 0000 0000 0000 0000 0101
计算方式:
5/2=2 余1
2/2=1余0
1/2=0余1
取反码:
1111 1111 1111 1111 1111 1111 1111 1010
反码+1
1111 1111 1111 1111 1111 1111 1111 1011
记住公式:
- 负数的整数部分转二进制
- 将得到的二进制按位取反
- 再加1
工作终于到类似情况。一个十六进制表达的负的温度先取符号位,取某个比特位的值。
/**
* 获取十六进制数据的二进制数据的某一个bit值
*
* @param hexStr hex string
* @param bit bit index
* @return value at bit index
*/
private static int valueAtBit(String hexStr, int bit) {
return (Integer.valueOf(hexStr, 16) >> (bit - 1)) & 1
}
获取二进制字符串:
System.out.println(Integer.toBinaryString(-8));
System.out.println(Integer.toBinaryString(-8>>2));
System.out.println(Integer.toBinaryString(-8<<2));
System.out.println(Integer.toBinaryString(-8>>>2));
结果:
11111111111111111111111111111000
11111111111111111111111111111110
11111111111111111111111111100000
111111111111111111111111111110