6.5.8 按位移位运算符
移位表达式包括:
E1 << E2E1 >> E2
两个操作数都必须具有整数类型。
在求值前,对两个操作数都执行整数提升;结果类型是提升后左操作数的类型。
若右操作数为负,或者大于等于提升后左操作数的宽度,则行为未定义。
左移
E1 << E2表示把E1左移E2个比特位,空出来的低位补0。若
E1是无符号类型,则结果值等于E1 * 2^E2,并按该无符号类型规则回绕。若
E1是有符号类型且值非负,并且E1 * 2^E2在结果类型中可表示,则结果就是这个值;否则行为未定义。
右移
E1 >> E2表示把E1右移E2个比特位。若
E1是无符号类型,或者是非负的有符号值,则结果等于E1 / 2^E2的整数部分。若
E1是负的有符号值,则结果由实现定义。
WARNING
对负有符号整数做右移,不是可移植地“算术右移”或“逻辑右移”;标准只说结果由实现定义。