1. 原码、反码、补码

image.png

  1. 带符号位移运算(<< 与 >>)
    带符号位移运算分为<<(左移)与>>(右移)。这两种位移,都是针对补码运算,符号位均参与位移运算,右移除负数往高位补1之外,其余位置都补0,而左移不管是正数还是负数,空位都补0,所以左移过程中,负数有可能变成正数,正数有可能会变成负数,自己体会一下。不分正负:针对偶数一般右移一位就是除2,左移一位是乘2,针对奇数,右移一位就是除2-1,减一因为多余一位被直接抹除了,左移一位也是乘2。请看以下示例:
  • 35

    原码:00100011            ~~~~            >>1(补码右移一位):00010001=17(2的0次方+2的4次方)
    补码:00100011            ~~~~            <<1(补码左移一位):01000110=70
    反码:00100011

  • -35(负数)

    负数比较特殊,这里来特殊说明一下:
    (1)首先说明原码:
    35的原码我们知道是00100011,所以-35的原码是10100011(最高位是符号位,负数的符号位是1,其余位跟正数是一样的)。
    (2)再说反码:
    负数的反码是负数的原码取反,所以-35的反码为11011100(高位仍然不变,负数一直是1,其他取反)。
    (3)再说补码:
    负数的补码是反码加一,所以-35的补码是11011101。所以:

    “>>1”(补码右移一位)=11101110(负数右移,高位补1),转成原码=10010010(补码减一,然后取反)= -18

    “<<1”(补码左移一位)=10111010,转成原码= 11000110= -70
    ————————————————
    版权声明:本文为CSDN博主「赵小样Jasmine」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/zhaozhi...


不熄炎
6 声望2 粉丝