C++ 无符号整数和有符号长数学

C++ 无符号整数和有符号长数学,c++,C++,我读过一本书,书中说如果你减去一个无符号值一个有符号值,有符号值将转换为无符号,但有符号的long long不会转换,例如 #include <iostream> int main() { unsigned int a = 10; long long b = 20; std::cout << a - b << std::endl; return 0; } #包括 int main() { 无符号整数a=10; 长b=20;

我读过一本书,书中说如果你减去一个无符号值一个有符号值,有符号值将转换为无符号,但有符号的long long不会转换,例如

#include <iostream>

int main()
{
    unsigned int a = 10;
    long long b = 20;
    std::cout << a - b << std::endl;
    return 0;
}
#包括
int main()
{
无符号整数a=10;
长b=20;

std::cout类型转换的规则之一是,如果其中一个类型可以表示另一个类型的所有值,则“较小”类型将转换为“较大”类型。因此,如果
无符号int
是32位类型,
long
是64位类型(通常情况下),则前者将转换为后者

是的,
无符号
通常比
有符号
更受欢迎,当类型具有相同的“秩”(即位宽度)时,但“较小”和“较大”类型的规则更重要


在对两个不同类型的值进行算术运算时,C++有复杂的类型转换规则。如果代码的正确性取决于这些规则,那么代码可能会以模糊的方式中断,因此最好使用显式类型转换!

较小类型的值通常会转换为与较大类型相同的类型。简言之,t
unsigned int
变量
a
将被转换为类型
long-long
。否则,如果相反的结果为真,则可能会丢失数据。阅读起来可能很好。哦,如果long-type大于int,int将转换为signed-long?是的,谢谢提供参考。转换值秩为int=long有符号长
-
无符号整数
=
无符号长
。但您可以在不了解这些细节的情况下编写好代码,只需知道它们存在,并在需要时进行显式转换。int=long=unsigned=unsigned long