gpt4 book ai didi

c++ - 当我混合有符号和无符号类型时会发生什么?

转载 作者:IT老高 更新时间:2023-10-28 22:19:16 27 4
gpt4 key购买 nike

我正在学习 C++ 语言,我对类型转换有些疑问,你能解释一下在这样的表达式中会发生什么吗:

unsigned int u = 10; 
int a = -42;
std::cout << u - a << std::endl;

在这里我知道,如果我在有两个数学运算符时应用规则,结果将是 52。但是我想知道当编译器将 a 转换为无符号值时会创建一个无符号类型的临时值时会发生什么,之​​后会发生什么?现在的表达式应该是 10 -4294967254。

最佳答案

简单来说,如果你混合相同等级的类型(按intlong intlong long int的顺序) ,无符号类型“获胜”,并且在该无符号类型中执行计算。结果是相同的无符号类型。

如果您混合不同等级的类型,则较高等级的类型“获胜”,如果它可以代表较低等级类型的所有值。计算是在该类型中执行的。结果就是那种类型。

最后,如果高位类型不能代表低位类型的所有值,则使用高位类型的无符号版本。结果就是那种类型。

在您的情况下,您混合了相同等级的类型(intunsigned int),这意味着整个表达式在 unsigned int类型。正如您正确陈述的那样,表达式现在是 10 - 4294967254(对于 32 位 int)。无符号类型遵循以 2^32 (4294967296) 作为模数的模运算规则。如果你仔细计算结果(可以用算术表示为 10 - 4294967254 + 4294967296),它会变成预期的 52

关于c++ - 当我混合有符号和无符号类型时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609091/

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