不确定为什么这个演员有效
Unsure why this cast works
我有以下代码:
unsigned short a, b, c, d;
unsigned long result;
a = 30000;
b = 40000;
c = 50000;
d = 60000;
result = (unsigned long)(a + b + c + d) / 4;
printf("result is %i", result);
结果是 (30000 + 40000 + 50000 + 60000) / 4 = 180000 / 4 = 45000,这是正确的。但我想知道为什么。我希望添加无符号短裤会溢出,因为它是在 16 位中完成的,添加后溢出的结果将转换为无符号长整数,然后除以 4。
我在这里错过了什么?
您的 short
在添加前已升级为 int
。
http://en.cppreference.com/w/cpp/language/implicit_conversion(link是关于C++的,但C的规则基本相同)
Integral promotion
...arithmetic operators do not accept types smaller than int
as arguments, and integral promotions are automatically applied...
我有以下代码:
unsigned short a, b, c, d;
unsigned long result;
a = 30000;
b = 40000;
c = 50000;
d = 60000;
result = (unsigned long)(a + b + c + d) / 4;
printf("result is %i", result);
结果是 (30000 + 40000 + 50000 + 60000) / 4 = 180000 / 4 = 45000,这是正确的。但我想知道为什么。我希望添加无符号短裤会溢出,因为它是在 16 位中完成的,添加后溢出的结果将转换为无符号长整数,然后除以 4。
我在这里错过了什么?
您的 short
在添加前已升级为 int
。
http://en.cppreference.com/w/cpp/language/implicit_conversion(link是关于C++的,但C的规则基本相同)
Integral promotion
...arithmetic operators do not accept types smaller than
int
as arguments, and integral promotions are automatically applied...