gpt4 book ai didi

c++ - 将较小整数的最大值分配给较大整数

转载 作者:太空狗 更新时间:2023-10-29 23:47:46 27 4
gpt4 key购买 nike

考虑以下代码:

 uint32_t x = ~uint8_t(0);
std::cout << x << std::endl;

现在,我完全希望它输出 255,但它却输出 4294967295

我知道 C++ 中的整数提升,但我不明白为什么会发生这种情况。按照我的理解,表达式 ~uint8_t(0) 的计算结果应该是二进制的 1111 1111。然后,~ 运算符会将类型提升为 int(为了便于讨论,我假设它是 32 位的),通过对值进行符号扩展到 0000 0000 0000 0000 0000 0000 1111 1111。然后应将此提升的值分配给左值 x,从而导致 x == 255

但显然我没有正确理解这一点。我错过了什么?

最佳答案

整数提升是在一元操作数上执行的 ~ , 所以 uint8_t(0)被提升为int然后是 ~被评估。相当于

~(int)(uint8_t)0

您可以使用 std::numeric_limits<T>::max() 获取类型可表示的最大值;如果类型是无符号的,你也可以转换 -1到那种类型:

uint32_t x = (uint8_t)-1;

关于c++ - 将较小整数的最大值分配给较大整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4073616/

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