尽管大部分编程语言以补码作为存储方式,但并不意味着这些编程语言右移都只有带符号位的右移。JavaScript提供了>>>不带符号位右移运算符。
a = -1
a >>>= 1 // a是2147483647
- Java同样提供逻辑右移运算符>>>,以区别于算术右移>>.
- C/C++/Objective-C/C# 没有逻辑右移运算符,一般是算术右移,真的需要逻辑右移需要特别处理高位。
- 注意,C/C++标准未规定右移后最高位的填充位,如果是负数,由编译器实现决定。但,为了更符合人类的理解,一般采用算术右移。
- Swift &>>运算符比较奇怪,尽管宣称是逻辑右移,但结果依然和算术右移类似。