gpt4 book ai didi

c - 直接将左移运算的结果赋值给一个变量和C中的左移赋值运算有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 16:29:23 25 4
gpt4 key购买 nike

在下面的表达式中,左移运算的结果被赋值给变量i

int i;
i = 7 << 32;
printf("i = %d\n",i);

在下面的表达式中,进行了左移赋值操作。

int x = 7;
x <<= 32;
printf("x = %d\n",x);

以上两个表达式给出了不同的结果。但是下面两个表达式就不一样了。他们都给出了相同的结果。那么上述表达式返回不同值的原因可能是什么?

int a;
a = 1 + 1;
printf("a = %d\n",a);

int b = 1;
b += 1;
printf("b = %d\n",b);

最佳答案

C 标准说:

The result is undefined if the right operand is negative, or greater than or equal to the number of bits in the left expression’s type.

所以,这是未定义的行为,因为int 通常是32 位的大小,这意味着只有0 通过 31 个步骤是明确定义的

关于c - 直接将左移运算的结果赋值给一个变量和C中的左移赋值运算有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44255195/

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