首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么无符号整数变量通常不受整数提升的影响?

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

Stack Overflow用户
提问于 2014-09-02 20:05:58
回答 2查看 167关注 0票数 2

在阅读了关于整数提升的几个问题之后,通常的理解是整数提升或只应用于小整数类型,如short intchar

但是,我想知道为什么不应该将unsigned int变量(即值15 )也提升到int。毕竟,按照下面引文中的语句(1)的要求,它的转换秩等于int和unsigned int的级别。

由于int可以没有任何问题地表示值15 (在我所知道的所有平台上),所以它应该被转换为int。

整数晋升

无论在何处使用int或无符号int,都可以在表达式中使用以下内容:

  1. 整数类型的对象或表达式,其整数转换秩小于或等于int和无符号int的秩。
  2. _Bool类型的位字段,int、符号int或无符号int.

如果int可以表示原始类型的所有值(受宽度限制,用于位字段),则将该值转换为int;否则,将其转换为无符号int。这就是所谓的整数晋升。所有其他类型都不受整数提升的影响。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-02 20:14:01

但是,我想知道为什么不应该将值15的无符号int变量提升为int。..。int可以表示值15,没有任何问题。

这一说法有两个问题:

  • 整数晋升并不意味着“升级到int";它意味着”晋升到intunsigned int“。因此,“促进”一个unsigned int是没有意义的:它已经被提升了。
  • 整数提升规则不考虑表达式的当前值。这些规则是专门用来描述一种类型的所有值的。因此,int能够表示值15这一事实与此无关,因为int不能表示unsigned int的所有值。
票数 8
EN

Stack Overflow用户

发布于 2014-09-02 20:17:00

通常,在编译时不可能知道在实际发生升迁时变量将持有哪些值。

在运行时研究变量的值以选择适当的类型会带来太多的开销,而且根本不可能。所以,编译器只有类型。

我认为选择无符号类型而不是有符号类型的主要原因是定义了无符号整数溢出,而有符号整数溢出是未定义的行为。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25631499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档