gpt4 book ai didi

c++ - 为什么变量和数字的位移位结果不同?

转载 作者:行者123 更新时间:2023-12-02 03:23:49 25 4
gpt4 key购买 nike

我正在移动一些位,刚刚意识到使用变量执行操作与使用数字执行操作不会获得相同的结果。请参阅下面的示例。

int a = 97;
int b = 0;

b = 1 << a;
printf("%d\n", b);
// 2

b = 1 << 97;
printf("%d\n", b);
// 0 - warning: shift count >= width of type [-Wshift-count-overflow]

最佳答案

由于 left shift 的结果如果右操作数大于左操作数的位长度,则未定义,表达式中可能出现任何结果。

在变量情况下 ( 1 << a ),因为 a是 97(大于 int 中的位数),最可能的结果是 1 << (97 % 32) == 1 << 1 == 20 ,通常取决于硬件 (CPU) 如何处理这些转变。

使用常量 ( 1 << 97 ),编译器知道您移动得太远,发出警告(这不是必需的),并将结果定义为 0 (也不是必需的)。

关于c++ - 为什么变量和数字的位移位结果不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56487343/

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