移位:逻辑右移、算数右移
文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。
在程序设计中,移位(shift)是位操作运算符的一种。在二进制的基础上,使用移位操作可以完成乘法等运算。
左移
其中,左移($<<$)操作都是在右边添 $0$,
例如,$3<<2$,可以视作
0x00000011 << 2 $\rightarrow$ 0x000011[0][0] (12)
相当于做了两次 $\times 2$ 的乘法。
右移
而右移操作分为逻辑右移和算术右移,也记作无符号右移($>>>$)和带符号右移 ($>>$)。
C 语言中默认进行的是算术右移,即保持符号位。 若要执行逻辑右移,可将当前数强制转换为无符号数。
类似地,右移操作相当于做了 $2^n$ 的除法。
在该区分下,以 $-5$ (0xfffffffb) 为例,
- 算数右移,0xfffffffb >> 2 $\rightarrow$ 0xfffffffe
- 逻辑右移,0xfffffffb >>> 2 $\rightarrow$ 0x3ffffffe
Codes
测试代码
1 |
|
你学废了吗?
都看到这儿了,不如关注每日推送的“科文路”、互动起来~
移位:逻辑右移、算数右移