响水凹

欢迎来到 Guang-Wen Duan (Dennis Duan) 的个人 Wiki

用户工具

站点工具


computer:c:tips:bitwise_shift

移位操作符的注意事项

移位操作符<<和>>的两个操作数必须是整数,与一般二元操作不同的是,两个操作数分别进行一元转换,结果类型为第一操作数转换为的类型。

移位次数(第二操作数)必须大于等于0,且小于被移位数(第一操作数)的bit位数,否则结果是未定义的(undefined)。例如,被移位数是一个32位的int整数,则第二操作数的合法取值范围是0~31。

对于左移<<运算,左侧移出的位被丢弃,右侧补入0。

对于右移>>运算,右侧移出的位被丢弃,左侧补入的值依赖于被移位数的类型和编译器实现:

  • 如果是无符号类型(unsigned)或非负的有符号类型(signed and non-negative),则补入0;
  • 如果是负数(negative),则可补入0或1,具体依赖于实现。

所以,如果要保证代码的可移植(portable)性,需要特别注意负数右移的情况。

computer/c/tips/bitwise_shift.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1