ASCII值大于127
#include <stdio.h>
int main() {
char c = 125;
c = c + 10;
printf("%d", c);
return 0;
}
这段代码的输出是-121。
这个输出如何-121?你能解释一下吗?
如果我添加100而不是10withc那么输出是-31. 为什么?
回答
在 C 语言中,该char类型是一个整数类型,能够表示语言本身所需的所有字符。该标准没有指定它是有符号类型还是无符号类型。看到输出后,我可以猜测您的系统使用大小为 8 位(7 个值位和一个符号位)的有符号字符并以 2 补码表示负值。
所以(作为 int)125 + 10 = 135。135 > 128 所以实际值是 135 - 256 = -121。
(在二补模式下,数字刚好被包裹在 2**SIZE_IN_BITS...)