【发布时间】:2009-04-16 11:04:45
【问题描述】:
我正在经历 k & r。我在理解第 197 页(第 A6 节)上的以下几行时遇到问题
整数转换:任何整数都是 转换为给定的无符号类型 找到最小的非负数 与那个一致的值 整数,模多一 可以表示的最大值 在无符号类型中。
任何机构都可以详细解释一下吗? 谢谢
【问题讨论】:
标签: c
我正在经历 k & r。我在理解第 197 页(第 A6 节)上的以下几行时遇到问题
整数转换:任何整数都是 转换为给定的无符号类型 找到最小的非负数 与那个一致的值 整数,模多一 可以表示的最大值 在无符号类型中。
任何机构都可以详细解释一下吗? 谢谢
【问题讨论】:
标签: c
这意味着只有低值位将被计数,而高位将被丢弃。
例如:
01111111 11111111 11110000 00001111
当转换为 16 位 unsigned short 时:
11110000 00001111
这在数学上有效地表达为:
target_value = value % (target_type_max+1) ( % = modulus operator )
【讨论】:
通过找到与该整数一致的最小非负值,将任何整数转换为给定的无符号类型,该整数比无符号类型中可以表示的最大值大一模。
让我们从后面一点一点地看:
n 位宽的无符号类型可以表示的最大值是多少?
2^(n) - 1.
比这个值多一是什么?
2^n.
转换是如何发生的?
unsigned_val = signed_val % 2^n
现在,为什么部分:该标准没有规定使用什么位表示。因此行话。在二进制补码表示中——这是迄今为止最常用的——这种转换不会改变位模式(当然,除非有截断)。
有关详细信息,请参阅标准的积分转换。
【讨论】: