gpt4 book ai didi

c - 处理轮类运算符(operator)时的意外行为

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:12 24 4
gpt4 key购买 nike

我的程序如下:

void main() {
int n =0;
printf("%x", (~0 << (32+ (~n +1) )));
}

由于 n = 0,~n = 0xffffffff == -1,所以 ~n + 1 等于 0。当我执行这个程序时,我得到 0xffffffff,这是不正确的,因为 (~0 << 32) 输出 0。

当我用 0 替换 (~n +1) 时,它输出 0。

非常感谢任何帮助。

最佳答案

您正在将一个 32 位宽的值移动 32 位。
结果是不确定的,就你所知,它可能等于蘑菇千层面。

[C99: 6.5.7/3]: The integer promotions are performed on each of the operands. The type of the result is that of the promoted left operand. If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined.

那么,任何进一步的分析都是愚蠢的。

关于c - 处理轮类运算符(operator)时的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25611903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com