考虑以下代码:
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.
但显然我没有正确理解这一点。我错过了什么?