为什么无符号整数变量通常不受整数提升的影响?

Mul*_*ync 2 c promotions

在阅读了关于整数提升的相关问题之后,似乎是整数提升或仅适用于小整数类型(例如short int或)的常见理解char.

但是,我想知道为什么不应该将unsigned intie值的变量15提升为一个int.毕竟,它的转换等级等于int和unsigned int的等级,如下面引用中的语句(1)所要求的那样.

作为一个int可以代表值15而没有任何问题(在我知道的所有平台上),它应该转换为int.

整数促销

如果可以使用int或unsigned int,则可以在表达式中使用以下内容:

  1. 具有整数类型的对象或表达式,其整数转换等级小于或等于int和unsigned int的等级.

  2. _Bool,int,signed int或unsigned int类型的位字段.

如果int可以表示原始类型的所有值(由宽度限制,对于位字段),则该值将转换为int; 否则,它将转换为unsigned int.这些被称为整数促销.整数促销不会更改所有其他类型.

das*_*ght 8

但是,我想知道为什么ie值的unsigned int变量15也不应该被提升为一个int.[...] a int可以15毫无问题地代表价值

这个陈述有两个问题:

  • 整型的提升,并不能意味着"提升为int"; 它意味着"升级为intunsigned int".因此,"促进"一个unsigned int没有意义:它已经被提升了.
  • 整数提升规则不考虑表达式的当前值.这些规则专门用于讨论类型的所有值.因此,a int能够表示值的事实15是无关紧要的,因为int它不能表示所有的值unsigned int.