不确定为什么这个演员有效

时间:2017-10-07 11:42:01

标签: c casting long-integer parentheses short

我有以下代码:

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。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您的short在添加之前已提升为int

http://en.cppreference.com/w/cpp/language/implicit_conversion(链接是关于C ++的,但C规则基本相同)

  

整体推广

     

...算术运算符不接受小于int的类型作为参数,并且会自动应用整数促销...