在阅读了关于整数提升的几个问题之后,通常的理解是整数提升或只应用于小整数类型,如short int
或char
。
但是,我想知道为什么不应该将unsigned int
变量(即值15
)也提升到int
。毕竟,按照下面引文中的语句(1)的要求,它的转换秩等于int和unsigned int的级别。
由于int
可以没有任何问题地表示值15
(在我所知道的所有平台上),所以它应该被转换为int。
整数晋升
无论在何处使用int或无符号int,都可以在表达式中使用以下内容:
如果int可以表示原始类型的所有值(受宽度限制,用于位字段),则将该值转换为int;否则,将其转换为无符号int。这就是所谓的整数晋升。所有其他类型都不受整数提升的影响。
发布于 2014-09-02 20:14:01
但是,我想知道为什么不应该将值
15
的无符号int变量提升为int
。..。int
可以表示值15
,没有任何问题。
这一说法有两个问题:
int
";它意味着”晋升到int
或unsigned int
“。因此,“促进”一个unsigned int
是没有意义的:它已经被提升了。int
能够表示值15
这一事实与此无关,因为int
不能表示unsigned int
的所有值。发布于 2014-09-02 20:17:00
通常,在编译时不可能知道在实际发生升迁时变量将持有哪些值。
在运行时研究变量的值以选择适当的类型会带来太多的开销,而且根本不可能。所以,编译器只有类型。
我认为选择无符号类型而不是有符号类型的主要原因是定义了无符号整数溢出,而有符号整数溢出是未定义的行为。
https://stackoverflow.com/questions/25631499
复制相似问题