二进制用补码做加减法
- 1.最高位为符号位,0正1负;加减法都使用补码形式的加法;正数补码为原码本身;负数补码为其反码+1;运算结果位数溢出的部分舍弃
8+2=10
00001000(8补码)
00001010(结果为补码)
00001010(符号位为0表正数,正数补码就是原码)=10
8-2=8+(-2)=6
00001000(8补码)
100000110(结果为补码)
00000110(第一位溢出舍弃)
00000110(原码)=6
二进制用补码做乘除法
带符号位移case:
-7>>1 = -4
第一步:00000000 00000000 00000000 00000111(7的原码)
第二步:11111111 11111111 11111111 11111001(-7的补码,第一步求反+1)
第三步:11111111 11111111 11111111 11111100(带符号位移)
第四步:00000000 00000000 00000000 00000100(-1 取反 )
第五步:10000000 00000000 00000000 00000100(符号位补1)答案是-4
无符号位移case:
-1>>>4 = ox0FFFFFFF
第一步:00000000 00000000 00000000 00000001(1的原码)
第二步:11111111 11111111 11111111 11111111(-1的补码,第一步求反+1)
第三步:00001111 11111111 11111111 11111111(无符号位移)答案是ox0FFFFFFF