我的课程如下:
void main() {
int n =0;
printf("%x", (~0 << (32+ (~n +1) )));
}
当n = 0,~n = 0xffffffff == -1时,所以~n + 1等于0。 当我执行这个程序时,我得到0xffffffff,这是不正确的,因为(〜0 <&lt; 32)输出0。
当我用0替换(~n +1)时,它输出0.
非常感谢任何帮助。
答案 0 :(得分:6)
您将32位宽的值移位32位 结果是不确定的,并且可以与所有你知道的蘑菇烤宽面条相同。
[C99: 6.5.7/3]:
对每个操作数执行整数提升。结果的类型是提升的左操作数的类型。 如果右操作数的值为负或大于或等于提升的左操作数的宽度,则行为未定义。
然后,任何进一步的分析都是愚蠢的。