Jay*_*esh 9 c bit-shift shift undefined-behavior language-lawyer
在一次采访中询问了这个问题.
<<
负值左移具有未定义行为的原因是什么,而>>
负数签名数的右移具有实现定义的行为?
C11 $ 6.5.7:
第4段:
E1 << E2的结果是E1 左移 E2位位置; 腾出的位用零填充.如果E1具有无符号类型,则结果的值为E1 x 2 ^ E2,模数比结果类型中可表示的最大值减1.如果E1具有有符号类型和非负值,并且在结果类型中可以表示E1 x 2 ^ E2,那么这就是结果值; 否则,行为未定义.
第5段:
E1 >> E2的结果是E1 右移 E2位位置.如果E1具有无符号类型或者E1具有有符号类型和非负值,则结果的值是E1/2 ^ E2的商的整数部分.如果E1具有带符号类型和负值,则结果值是实现定义的.
为什么左移一个负的有符号值是不明确的行为?
归档时间: |
|
查看次数: |
1207 次 |
最近记录: |