左移和右移
左移:<< --------------------------------------------右移:>>
有符号位(signed):指最高位表示符号位,0代表“+”,1代表“–”,数有正负。
无符号位(unsigned):指完全表示绝对二进制数值。
有符号位:(1001)B = (-1)H. (0001)B = (+1)H
无符号位:(1001)B = ( 9 )H. (0001)B = ( 1 )H.
我们先来看正整数的左移和右移:
左移:高位移除,低位补0------------------------------右移(无符号):高位补0,低位移除
e.g1 e.g2
1111 1111 :<<2 1111 1111 :>>2
1111 1100 0011 1111
左移没有符号的区分,右移则有。
右移有体现在负数的移位上:高位补1,低位移除。
e.g 1
-------------这是负数有符号的右移位
-2的原码:1000 0010 //全程最高位符号位“1”保持不变
补码:1111 1110 //补码=原码取反+1. 先取反,再加1.
>>2: 1111 1111 //高位补1,低位移除。
然后按位取反+1:1000 0001 结果为-1.
e.g 2
-------------这是负数无符号的右移位
-2的原码:1000 0010 // 最高位符号位“1”保持不变
补码:1111 1110 //补码=原码取反+1. 先取反,再加1.
>>2:0011 1111 //高位补0,低位移除。结果为63.
作者:偌离 2019.7.20