gpt4 book ai didi

c++ - 通过左移,可以将1设置为零

转载 作者:行者123 更新时间:2023-12-03 07:09:43 24 4
gpt4 key购买 nike

我在左移运算符中有一个困惑

int a =1;
cout<<"size of int: "<<sizeof(int)<<endl;
cout <<(a<<31)<<endl;
cout <<(a<<32)<<endl;
结果是: size of int: 4 -2147483648 1如果我向左移32或33,它将打印1。
如何以及为什么是1,如果我想将1左移为零,我该怎么做?
谢谢。

最佳答案

不允许将值1移到有符号整数的符号位中。这样做是undefined behavior。如果这样做,不能保证编译器会产生任何特定的结果。
类似地,移位大于或等于所讨论整数的位宽(无论有符号还是无符号)的数量,也会调用未定义的行为。
C standard的6.5.7节第2和第3段中有关按位移位运算符的规定:
3对每个操作数执行整数提升。结果的类型是提升后的左操作数的类型。 如果右操作数的值为负或大于或等于提升的左操作数的宽度,则该行为未定义。
4 E1 << E2的结果是E1左移E2位的位置;空位用零填充。如果E1具有无符号类型,则结果的值为E1×2E2,与结果类型中可表示的最大值相比,以模方式减少了一个。 如果E1具有带符号的类型和非负值,并且E1×2E2可表示为结果类型,则为结果值;否则,结果为0。否则,行为是不确定的。

关于c++ - 通过左移,可以将1设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64584237/

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