移位操作符的注意事项

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

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

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

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

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