2进制原码反码补码,2进制加减乘除原理

二进制用补码做加减法

  • 1.最高位为符号位,0正1负;加减法都使用补码形式的加法;正数补码为原码本身;负数补码为其反码+1;运算结果位数溢出的部分舍弃
8+2=10
    00001000(8补码)
   +00000010(2补码)
--------------------------------
    00001010(结果为补码)
    00001010(符号位为0表正数,正数补码就是原码)=10
8-2=8+(-2)=6
    00001000(8补码)
   +11111110(-2补码)(2原码为00000010,反码11111101)
--------------------------------
   100000110(结果为补码)
    00000110(第一位溢出舍弃)
    00000110(原码)=6

二进制用补码做乘除法

  • 1.乘法左移,相当于<<;除法右移,相当于<<
带符号位移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

猜你喜欢

转载自blog.csdn.net/lyt_angularjs/article/details/80613228