C++ 将重复~和<&书信电报;在所有平台上,操作收敛到负值?

C++ 将重复~和<&书信电报;在所有平台上,操作收敛到负值?,c++,bit-manipulation,bitwise-operators,C++,Bit Manipulation,Bitwise Operators,在以下程序中,将重复~和 我的估计是会的,因为左移不是 实现定义 上述说法是错误的。负值的左移为零,并且一旦初始零值的位反转,该值即为负 如果变量是无符号整数,那么可以公平地说,它将在所有兼容平台上收敛为正值(如果移位了足够多的位): inti{}应该是什么意思?或者是intx{}?序号的空初始值设定项列表vs=0,这是该数据类型的默认值。如果有符号变量的左移位溢出,则该列表未定义。@davidlyint i{}表示值初始化。对于POD整数,这意味着它将被初始化为0。@Barmar良好点。但是

在以下程序中,将重复~和 我的估计是会的,因为左移不是 实现定义

上述说法是错误的。负值的左移为零,并且一旦初始零值的位反转,该值即为负


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


inti{}
应该是什么意思?或者是
intx{}
?序号的空初始值设定项列表vs
=0
,这是该数据类型的默认值。如果有符号变量的左移位溢出,则该列表未定义。@davidly
int i{}
表示值初始化。对于POD整数,这意味着它将被初始化为0。@Barmar良好点。但是在这种情况下它会溢出吗?
int
s默认初始化为0,在30年的开发过程中,这是我唯一一次看到有人对序号类型使用
{}
。而且,
{}
在大多数情况下基本上都是“默认初始值设定项”的意思,所以它是无用的。因此,我的rant.test在一个/一些/大多数平台上的结论是,不可能证明所有平台都是正确的,真正的现代平台在算术上通常比古代平台更常见。我可以有条件地同意99%的实践假设。“但一般来说,它们是不可移植的。”杰克茨说得很好。只有当平台是C++标准时,你的“生成”在非2的互补性上会有所不同,你认为“如果变量是无符号整数”
#include <iostream>

int main()
{
    int x{};
    for(int i{}; i < 32; ++i) {
        x = ~x;
        x <<= 1;
        std::cout << x << '\n';
    }
}
#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';
    }
}
65534
2
65530
10
65514
42
65450
170
65194
682
64170
2730
60074
10922
43690
43690