需要有关以下代码输出的帮助,并在可能的情况下进行说明

时间:2018-09-05 10:06:09

标签: c

char c = 250;
c += 8;

执行以上语句后c具有什么值? (给出答案的十进制整数。)

我尝试了值258,3。 提示:以二进制形式写出加法运算。

2 个答案:

答案 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