char c = 250;
c += 8;
执行以上语句后c具有什么值? (给出答案的十进制整数。)
我尝试了值258,3。 提示:以二进制形式写出加法运算。
答案 0 :(得分:2)
类型char
可以是有符号的也可以是无符号的-这取决于实现。假设8位char
可以保留的值范围为
签名:-128至127
无符号:0至255
代码以
开头char c = 250;
超出签名的char
的允许范围,并且当您将该值分配给签名的char
时会发生什么 undefined 。因此,假设char
是无符号的,现在
char c = 250;
是有效的分配。因此,按照您的建议,以二进制形式进行加法
Binary Decimal
11111010 250
00001000 8
-------- ---
100000010 ???
总和溢出8位,并且无符号值被截断为8位(模256)。
00000010 2
因此结果为2
(无符号)或未定义(有符号)。
答案 1 :(得分:0)
对于无符号字符,最小值为0,最大值为255。
因此,如果将250加8,则得到2。
发生这种情况的原因是,当值为255时,该字节中的所有位均为1。递增最低有效位将一直溢出到“结尾”,而所有位都为0。
如果您需要对此有更好的了解,我建议您:
https://en.wikipedia.org/wiki/Integer_overflow
https://en.wikipedia.org/wiki/Binary_number