【发布时间】:2014-05-16 02:51:51
【问题描述】:
我了解字符变量的范围为 (signed)-128 到 127 和 (unsigned)0 到 255
char x;
x = 128;
printf("%d\n", x);
但它是如何工作的?为什么x 得到-128?
【问题讨论】:
-
谷歌“补码”
-
然后谷歌“符号扩展”以了解为什么在格式字符串中提升为 int (%d) 时它保持负数。
-
要理解为什么它保持负数,请回忆一下 C 对值的操作。
-128的值在转换为-128对其有效的另一种类型时保持为-128。无论表示形式(其中“符号扩展”是一个方面) -
@JohnH "sign extension" 不相关;如果 x 为负数,则无论它如何表示,它在提升为 int 时都保持负数。由于标准规定了这一点,符号扩展就是典型实现的方式。
标签: c