我试图理解 C++ 中的隐式转换规则,并且我理解当两个主要类型之间存在一个操作时,“较低类型”将提升为“较高类型”,因此可以这样说:
int a = 5;
float b = 0.5;
std::cout << a + b << "\n";
应该打印 5.5,因为 'a' 被提升为 float 类型。我还了解到,无符号类型是比有符号计数器部分“更高的类型”,因此:
int c = 5;
unsigned int d = 10;
std::cout << c - d << "\n";
打印 4294967291 因为 'c' 被提升为无符号整数,并且由于无符号类型在小于零时回绕,我们得到了那么大的数字。
然而,对于以下情况,我不明白为什么我得到 -105 而不是正数。
#include <iostream>
int main(void) {
unsigned char a = 150;
std::cout << static_cast<int>(a - static_cast<unsigned char>(255)) << "\n";
return 0;
}
我猜这段代码:
a - static_cast<unsigned char>(255)
应该产生一个正数,所以最终的转换(到 int)不应该影响最终结果,对吧?
您错过了(隐式)转换unsigned char
to int
恰好执行-
(减)运算。每当您尝试将任何整数运算应用于小于以下值的某些整数类型的值时,都会发生此整数提升int
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)