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

C &引用;如果一个int可以保存原始类型的所有值,那么该值将转换为int,否则转换为unsigned int"--这意味着什么?,c,int,type-conversion,expression,unsigned-integer,C,Int,Type Conversion,Expression,Unsigned Integer,上面这一行是关于C语言中的隐式积分提升/转换,摘自Mike Banahan的书。下面是确切的段落: C不会以小于int的精度进行任何运算,因此,几乎每当您在表达式中使用下面列出的对象之一时,都会隐含这些转换。转换定义如下: 无论何时,只要一个短字符或一个字符(或一个位字段或枚举类型 尚未见面)是否应用了积分促销 如果int可以保存原始类型的所有值,则 值转换为整数 否则,将转换为无符号整数 以下是我对粗体部分的困惑。请澄清这些问题: “其他”部分不是多余的吗?如果int的大小大于这两种类型

上面这一行是关于C语言中的隐式积分提升/转换,摘自Mike Banahan的书。下面是确切的段落:

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

无论何时,只要一个短字符或一个字符(或一个位字段或枚举类型 尚未见面)是否应用了积分促销

  • 如果int可以保存原始类型的所有值,则 值转换为整数
  • 否则,将转换为无符号整数
以下是我对粗体部分的困惑。请澄清这些问题:

  • “其他”部分不是多余的吗?如果int的大小大于这两种类型,那么默认情况下,所有shortchar类型不都应该适合int吗?short不适合int并且需要无符号int的问题是如何产生的
  • “否则”部分如何有效?如果负短整数隐式转换为无符号整数,其值不会更改吗
虽然我很想把它当作琐碎的事情来处理,但我觉得得到一个恰当的解释会更好。多谢各位

一个
int
类型(根据C标准)不必大于
short
int
只能比
short
短。例如,它们都可以是16位。在这种情况下,可能存在无法放入
int
无符号short


(上的Wikipedia页面很有启发性。)

Int可以保存short的所有值,但不一定包含unsigned short的所有值。添加对C规范的引用以改进您的答案。