"如果int可以保存原始类型的所有值,那么该值将转换为int,否则转换为unsigned int" - 这意味着什么?

时间:2014-09-21 02:48:07

标签: c int type-conversion expression unsigned-integer

以上一行是关于C中隐含的整体促销/转换,取自Mike Banahan Section 2.8.1.1 (Link)的书。这是确切段落的内容:

  

C不会以比int短的精度完成算术运算,因此几乎每当您在表达式中使用下面列出的对象之一时,这些转换都会隐含。转换定义如下:

     

每当一个短或一个字符(或我们的字段或枚举类型)   还没有遇到过积分促销活动

     
      
  • 如果int可以保存原始类型的所有值,那么   value转换为int
  •   
  • 否则,转换将为unsigned int
  •   

以下是我对粗体部分的疑惑。请清楚这些:

  • 不是"否则"部分多余?鉴于 int 大于 int ,所有 char 类型都不能适合 int 要么大小? 简短的问题如何不适合 int 并且需要 unsigned int 呢?
  • 如何"否则" part valid - 如果负的短整数被隐式转换为unsigned int,它的值是否会改变?

虽然我很想将其视为微不足道并继续前进,但我觉得得到正确的解释会更好。谢谢。

1 个答案:

答案 0 :(得分:2)

int类型(根据C标准)不必大于shortint必须“不短于”short。例如,它们都可以是16位。在这种情况下,可能会有unsigned short值无法容纳int

C data types上的维基百科页面非常具有启发性。)