繁体   English   中英

什么时候将类型提升为unsigned int?

[英]When does a type get promoted to an unsigned int?

这篇文章说:

如果原始类型的所有值都可以表示为int,则较小类型的值将转换为int; 否则,它将转换为unsigned int

所有有signed/unsigned char和有signed/unsigned short都可以表示为int ,那么何时将类型提升为unsigned int呢?

一个short不能大于一个int但是在某些平台上,它的大小可能相同。 intlong 这意味着,如果“较小”的一个未签名,那么“较大”的一个也必须是无符号的。

本文使用的是草率的术语。 源类型不必比int “小”。 这是C ++ 11标准所说的:

如果int可以表示源类型的所有值,则整数转换等级(4.13)小于int等级的boolchar16_tchar32_twchar_t的整数类型的prvalue可以转换为int类型的prvalue ; 否则,可以将源prvalue转换为unsigned int类型的prvalue。

在某些平台上,例如unsigned shortint均为16位长。 但是,根据定义, unsigned short 等级低于int等级 ,并且需要进行整体提升。 在这种情况下, int不能表示unsigned short类型的所有值,因此提升为unsigned int

编辑:C99有类似的措辞:

在可以使用intunsigned int的表达式中可以使用以下代码:

  • 具有整数类型的对象或表达式,其整数转换等级小于或等于intunsigned int的等级。
  • 类型为_Boolintsigned intunsigned int的位域。

如果int可以表示原始类型的所有值,则该值将转换为int 否则,将其转换为unsigned int 这些称为整数促销。 48)所有其他类型均不受整数促销的影响。

好吧,如果sizeof(char)== sizeof(int),则将unsigned char提升为unsigned int

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM