参考:https://www.cnblogs.com/idorax/p/6305476.html
- 计算机系统中,数值一律按补码存储
- 正数的原码补码反码一样; 负数反码是原码各位取反,补码是反码加一
- 无符位移是逻辑位移
Logic
;有符位移是算术位移Arithmetic
- 对于左移,无论逻辑左移还是算术左移,低位补
0
- 对于右移,逻辑右移(无符右移),高位补
0
;算术右移(有符右移),高位补1
实例:-4
有符右移两位和无符右移两位分别是多少?
解答: 首先,-4
是按补码存储。4
的补码为 000 0100
-> 111 1011 + 000 0001
-> 111 1100
; 添加符号位表示为1111 1100
无符右移,忽略符号位,高位补0
,直接得到0011 1111
-> 1+2+4+8+16+32 = +63
有符右移,符号位1
不动,高位补1
,111 1111 - 000 0001
-> 111 1110
-> 原码000 0001
-> -1