二进制补码
精度损失
- 损失的是高位的数值:
int类型 256 -> 0000 0001 0000 0000
byte类型256 -> 0000 0000
前面的“0000 0001”没有地方存储而丢失,最后变为了0
& “与” 运算
都为1则为1,否则为0
1111 & 0000 = 0000
1010 & 1111 = 1010
| “或”运算
存在1为1,全0为0(无进位相加)
1010 | 0101 = 1111
1111 | 0000 = 1111
1010 | 1111 = 1111
0101 | 0000 = 0101
~ “非”运算
0为1,1为0
~1011 = 0100
^ “亦或”运算
相同为0 ,不同为1
1010 ^ 0101 = 1111
1111 ^ 0000 = 1111
1010 ^ 1111 = 0101
<< “左移”运算
符号位保持不变的情况下剩余全部左移一位,低位补0,相当于乘以2的结果
1011 << 2 = 1100
0101 << 1 = 0010
数值超过最大限度后,再次左移会出现问题
>> 有符号“右移”运算
符号位保持不变的情况下剩余全部右移一位,高位补0,相当于除以2的结果
1011 >> 2 = 1000
0101 >> 1 = 0010
>>> 无符号“右移”运算
连带符号位一起右移
1011 >>> 2 = 0101
0101 >>> 1 = 0010
二进制运算、与运算,会由于高位丢死而造成精度问题
二进制运算、与运算,会由于高位丢死而造成精度问题
二进制运算、与运算,会由于高位丢死而造成精度问题