关于整数促销

时间:2012-04-26 15:26:34

标签: integer promotions

学习C转换我发现了一段关于Integer促销的段落我不太了解,它说:

"Integer types smaller than int are promoted when an operation is performed on them. If all values of the original type can be represented as an int, the value of the smaller type is converted to an int; otherwise, it is converted to an unsigned int"

考虑到:

  1. 任何无符号整数类型的等级等于相应有符号整数类型的等级

  2. long long int的等级大于long int的等级,大于int的等级,大于short int的等级,short int大于signed char的等级。

  3. 问题是: 为什么小于int的类型不应该用int表示? 为什么unsigned int可以表示int不应该表示的值?

    提前致谢。

1 个答案:

答案 0 :(得分:0)

虽然short等级低于int,但它可以是相同的大小(以位为单位),例如16位系统上的sizeof(int) == sizeof(short) == 2。因此,unsigned short可能会保留大于INT_MAX的值。

对于问题的第二部分,答案大致相同:unsigned int可以包含无法表示为int的值,即INT_MAX+1 .. UINT_MAX