我是通过k&河我在第197页(第A6节)
中理解以下几行时遇到了问题积分转换:任何整数都是 转换为给定的无符号类型 找到最小的非负面 与此一致的价值 整数,模数比一个多 可以表示的最大值 在无符号类型中。
任何机构都可以详细解释一下。 感谢
答案 0 :(得分:6)
这意味着只有低值位才会被计数,高位将被丢弃。
例如:
01111111 11111111 11110000 00001111
转换为16位unsigned short
时将是:
11110000 00001111
这在数学上有效地表达为:
target_value = value % (target_type_max+1) ( % = modulus operator )
答案 1 :(得分:6)
通过查找与该整数一致的最小非负值,将任何整数转换为给定的无符号类型,模数比可以在无符号类型中表示的最大值多一个。
让我们一点一点地从后面开始:
在无符号类型的宽度n位中可以表示的最大值是多少?
2^(n) - 1.
什么比这个值更重要?
2^n.
转换是如何进行的?
unsigned_val = signed_val % 2^n
现在,原因部分:标准没有规定使用什么位表示。因此行话。在二进制补码表示中 - 这是迄今为止最常用的 - 这种转换不会改变位模式(当然,除非有截断)。
有关详细信息,请参阅标准中的积分转换。