关于C语言无符号字符变量的问题

问题如下:为什么下面输出的是251?上面输出-5我能理解,但这个251是怎么来的,求大神解答,在线等~~截图和程序如下:

#include <stdio.h>
main()
{
signed char a;
unsigned char b;
int i,j;
i=-5;
a=i;
b=i;
printf("%d,%d\n",i,a);
printf("%d,%d\n",i,b);
getch();
}

负数在计算机里是补码表示的
5=(101)2
所以-5=(11111011)
无符号的数字中每一位都代表是数
由于(11111011)2=251
所以输出251
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-17

你输出b应该是输出字符!(也就是%c)。

追问

我想知道它是怎么算出来的,是怎么个截断法

第2个回答  2015-02-17
你查下补码就明白了,255 = -1 所以251 = -5.追问

为什么是用补码表示

追答

补码(two's complement) 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

相似回答