小智 5
C99 标准对按位移位运算符有这样的规定(添加了强调,并且^用于表示求幂):
\n\n\n\xc2\xa76.5.7.3:对每个操作数执行整数提升。结果的类型是提升后的左操作数的类型。如果右操作数的值为负数或大于或等于提升的左操作数的宽度,则行为未定义。
\n
\n \xc2\xa76.5.7.4 : 的结果E1 << E2是E1左移位E2位置;空出的位用零填充。如果E1具有无符号类型,则结果的值为E1 \xc3\x97 2^E2,比结果类型中可表示的最大值再模一减少。如果E1具有有符号类型和非负值,并且E1 \xc3\x97 2^E2\n 可在结果类型中表示,则这就是结果值;否则,行为是未定义的。
\n **\xc2\xa76.5.7.5:结果E1 >> E2是E1右移位E2位置。如果\nE1具有无符号类型或E1具有有符号类型和非负值,则结果的值是 的商的整数部分E1 / 2^E2。如果E1具有有符号类型和负值,则结果值是实现定义的。
因此,总而言之,如果满足以下任一条件,则行为是未定义的:
\n\n| 归档时间: |
|
| 查看次数: |
1139 次 |
| 最近记录: |