22问答网
所有问题
C语言unsigned char x=-1;printf("%d\n",x);为何输出会是255?
如题所述
举报该问题
其他回答
第1个回答 2020-05-05
需要了解整数在计算机中的编码
,对于整数在计算机中一般是原码、
反码
、补码三种编码方式,以-1为例。选择8位的
二进制数
来表示:
-1的原码
10000001
//最高位为符号位
-1的反码
11111110
//符号位不变,各位求反
-1的补码
11111111
//符号位不变,反码加1
所以,当使用unsigned
char
即无符号整数时,-1用补码表示即1111
1111,
十六进制
表示为0xff
,
十进制
表示即为255。
第2个回答 2019-05-07
计算机中,有符号数用补码(按位取反加1)表示,其最高位表示符号(0正1负);-1的补码(1111
1111)对应的无符号数就是255
相似回答
为何
signed
char
和
unsigned
char
x=-1printf(
"
%d
\n"
,x)
答:
-1在存储时,第一位是符号位,-用1表示,负数用补码存储,因此-1,存储的时候计为11111111。第一个有符号,读出为-
1;
第二个为无符号,此时8位都为数字位,读为
255
。
mai
n()
{
unsigned
char
c1
=255;
char c2=255; int a=c1,b=c2
; print
...
答:
unsigned是
无符号数,因此255不超过范围,当把它赋给整型数时,不越界且为正.
char是
单字节
,255
越界是-
1,
赋值给整型仍是-1.
大家正在搜