【发布时间】:2017-05-27 10:19:05
【问题描述】:
#include<stdio.h>
int main(void)
{
signed char b=0xFF;
printf("%d\n",b);
return 0;
}
这里 255 的 0xFF 被初始化为 b(有符号字符),但在这里我们知道 b 不能存储它,因为有符号字符的范围是从 -128 到 127。 所以 b 可以是 -128 到 127 之间的任何值。 但我不明白输出到底是怎么变成-1的?
【问题讨论】:
-
阅读有关二进制补码表示的更多信息。
-
但在这里我们知道
b无法存储它...不确定您的确切意思。0xFF是 8 位,signed char是 8 位,所以它肯定可以存储它。在 8 个bit signed char中,0xFF是 -1 的二进制表示。%d表示打印一个整数。当您将b打印为整数时,它是符号扩展,其值保持为-1。 -
char正如您所推断的那样,介于 -128 到 127 之间。当您分配的值超过signed变量类型的值时... 剩下的部分留给您找出来
标签: c