gpt4 book ai didi

c++ - 重复的 ~ 和 << 操作会在所有平台上收敛到负值吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:37 27 4
gpt4 key购买 nike

在下面的程序中,重复~和<<操作会不会在所有平台上收敛到一个负值?

#include <iostream>

int main()
{
int x{};
for(int i{}; i < 32; ++i) {
x = ~x;
x <<= 1;
std::cout << x << '\n';
}
}

我的评估是它会,因为左移不是实现定义的。如果 int 大于 32 位,那么唯一不会收敛的说法是否正确?

最佳答案

My assessment is that it will because the left shift is not implementation defined.

以上说法是错误的。负值的左移是 undefined behavior初始零值的位一反转,值为负。


如果变量是一个无符号整数,那么可以公平地说它将在所有兼容平台上收敛到一个正值(如果有足够多的位被移动):

#include <iostream>
#include <limits>

int main()
{
unsigned short x{};
for(int i{}; i < CHAR_BIT*sizeof(unsigned short); ++i) {
x = ~x;
x <<= 1;
std::cout << x << '\n';
}
}

产生(在 2 的补码系统上):

65534
2
65530
10
65514
42
65450
170
65194
682
64170
2730
60074
10922
43690
43690

关于c++ - 重复的 ~ 和 << 操作会在所有平台上收敛到负值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41473351/

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