C语言unsigned char x=-1;printf("%d\n",x);为何输出会是255?

unsigned char x=-1;
printf("%d\n",x);

char我是作为无符号字符型初始化为-1,仍后按照%d输出,结果为何会是255,想知道计算机具体处理过程。

需要了解整数在计算机中的编码 ,对于整数在计算机中一般是原码、反码、补码三种编码方式,以-1为例。选择8位的二进制数来表示:
-1的原码 10000001 //最高位为符号位
-1的反码 11111110 //符号位不变,各位求反
-1的补码 11111111 //符号位不变,反码加1

所以,当使用unsigned char 即无符号整数时,-1用补码表示即1111 1111,十六进制表示为0xff ,十进制表示即为255。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-12
计算机中,有符号数用补码(按位取反加1)表示,其最高位表示符号(0正1负);-1的补码(1111 1111)对应的无符号数就是255本回答被提问者采纳
第2个回答  2011-11-15
c里面,字符是以整形存储的,然后你限定为unsigned,即无符号,所以就是255了
第3个回答  2018-05-16
首先看-1,在c中将会默认为int类型,然后将int类型的-1强制转换为unsigned char类型,
相当于:(-1)%256
取模运算时,对于负数,应该加上被除数的整数倍,使结果大于或等于0之后,再进行运算.
对于上例:
-1+256=255,然后用255%256,结果就是255.
当然也可以-1+512=511,511%256的结果也是255.

C语言unsigned char x=-1;printf("%d\\n",x);为何输出会是255?
所以,当使用unsigned char 即无符号整数时,-1用补码表示即1111 1111,十六进制 表示为0xff ,十进制表示即为255。

为何signed char和unsigned char x=-1printf("%d\\n",x)
-1在存储时,第一位是符号位,-用1表示,负数用补码存储,因此-1,存储的时候计为11111111。第一个有符号,读出为-1;第二个为无符号,此时8位都为数字位,读为255。

unsigned char x,y=2 printf ("%d\\n",x)
手机版 我的知道 unsigned char x,y=2 printf ("%d\\n",x) unsignedcharx,y=2printf("%d\\n",x)printf("%d\\n",~y)输出的答案为253和-3,为什么第二个是-3啊... unsigned char x,y=2printf ("%d\\n",x)printf("%d\\n",~y)输出的答案为253和-3,为什么第二个是-3啊 展开  我来答 ...

char c = -1; printf("%x\\n",c);为什么是ffffffff而不是ff?
(1)就用VC++6.0建立一个C++工程吧,写上如下代码:(2)然后按下键盘上的F10,进行单步调试运行,右键单击代码区,在弹出的菜单中选择“Go To Disassembly” 进入汇编代码模式:(3)可以看到c的真实内存值哦~!小弟献丑了~! ^ ^

这个字符数组的长度为什么是255
char是8个bit的,他只能存储256种状态,对于char来说就是0到255(确切的说是unsigned char,好像这是跟编译器有关的,有的char是有符号的,那就是-128到127)strlen(a);这个函数判断字符串结束是以0(写成asc表示为'\\0')为标识的 当你存256的时候,写成二进制是1 0000 0000,因为char只有8个bit...

C语言unsigned赋负值后以整型输出还是赋值。为什么?
unsigned 定义的类型并不改变值在内存中的形式,这你要控制输出为无符号型的,就像是我们如果定义一个char类型的,输出如果用%d的话,那么显示的还是数字而不是字符。如果要输出无符号类型的话,请加u,如printf("%u",n);长整型的是%lu ,所以unsigned只是你希望定义的那个是无符号整型,但是输出语句...

关于c语言中char类型范围问题
最前面的1是符号位 第一位是1就是负数了 c语言中关于char范围的问题 char的取值范围为-128~127,所以char ch = 255;其实为char ch = -1;所以printf("%d , %d , %d\\n" , ch , ch + 1 , ch + 2);输出-1,0,1 关于c语言中char问题 include <stdio.h> int main(void){ char ch...

c语言这段码为何会输出-1?
printf("%d\\n", x);和x=x-1;两条语句 在执行printf时会对x进行符号扩展【char表示有符号数据,所以会进行符号位扩展】,因为x的符号位为1,所以整个数据扩展为0xFFFFFFFF这样一个值,而这个值是-1的补码,按有符号数据打印出:-1。输出后执行x=x-1,这时x的值变为-2 ...

在C语言中长度相同的有符号与无符号整型数间,原样赋值时为什么值...
unsigned a;int b=-1;a=b;printf("%d %d-> %u\\n",sizeof(int),b,a);\/\/输出-1 -> 4294967295(0Xffffffff,-1的补码)a=2147683648;\/\/0X80000000(-2147683648的补码)b=a;printf("%d -> %u\\n",b,a);\/\/输出-2147683648 -> 2147683648 return 0;} win32平台下,无符号(unsigned)...

对于以下代码: char ch = -1; printf(\\"%d\\\\n\\", ch); 输出结果是?
选择B,C中 char,字符,默认unsigned,占一个字节,题中以%d输出,可以转换

相似回答