【发布时间】:2010-11-01 22:27:46
【问题描述】:
考虑以下代码:
uint32_t x = ~uint8_t(0);
std::cout << x << std::endl;
现在,我完全期望它输出 255,但它却输出 4294967295。
我知道 C++ 中的整数提升,但我不明白为什么会发生这种情况。按照我的理解,表达式~uint8_t(0) 应该以二进制形式计算为1111 1111。然后~ 运算符将通过符号将值扩展为0000 0000 0000 0000 0000 0000 1111 1111,将类型提升为int(为了讨论,我假设它是32 位)。然后应该将此提升的值分配给左值x,从而得到x == 255。
但显然我没有正确理解这一点。我错过了什么?
【问题讨论】:
标签: c++ integer ones-complement