考虑以下代码:
uint32_t x = ~uint8_t(0);
std::cout << x << std::endl;
现在,我完全期望它输出255
,但它输出4294967295
。
我知道 C++ 中的整数提升,但我不明白为什么会发生这种情况。我理解它的方式,表达式~uint8_t(0)
应该以1111 1111
二进制计算。然后,~
运算符将int
通过符号将值扩展为0000 0000 0000 0000 0000 0000 1111 1111
. 然后应该将此提升的值分配给左值x
,从而产生x == 255
.
但显然我没有正确理解这一点。我错过了什么?