【问题标题】:"if an int can hold all values of the original type then the value is converted to int , else to unsigned int"--What it means?“如果一个 int 可以保存原始类型的所有值,那么该值将转换为 int ,否则转换为 unsigned int ”——这是什么意思?
【发布时间】:2014-11-15 07:28:39
【问题描述】:

上面这行是关于 C 中的隐式积分提升/转换,摘自 Mike Banahan Section 2.8.1.1 (Link) 的书中。以下是确切的段落:

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

每当我们使用 short 或 char(或位域或枚举类型)时 还没见面)有没有申请积分促销

  • 如果一个 int 可以保存原始类型的所有值,那么 值转换为 int
  • 否则,将转换为无符号整数

这是我对粗体部分的困惑。请清除这些:

  • “否则”部分不是多余的吗?鉴于 int 大于尺寸? short 不适合 int 并需要 unsigned int 的问题怎么会出现?
  • “否则”部分如何有效——如果负短整数隐式转换为无符号整数,它的值不会改变吗?

虽然我很想将其视为微不足道并继续前进,但我觉得得到一个适当的解释会更好。谢谢你。

【问题讨论】:

  • Int 可以保存所有的 short 值,但不一定是所有 unsigned short 的值。

标签: c int type-conversion expression unsigned-integer


【解决方案1】:

int 类型(根据 C 标准)不必大于 shortint 只能“不能短于”short。例如,它们都可以是 16 位。在这种情况下,unsigned short 的值可能无法放入 int

C data types 上的维基百科页面非常有启发性。)

【讨论】:

  • 添加对 C 规范的引用以改进您的答案。
猜你喜欢
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 2013-02-02
相关资源
最近更新 更多