main () { char x=0xFFFF; printf ("%d\n",x--); } 结果是-1,为什么?

main ()
{
char x=0xFFFF;
printf ("%d\n",x--);
}
结果是-1,为什么?

第1个回答  2012-02-02
%d是整数输出格式,也就是说将0xffff作为整数输出。而char类型的0xFFFF在内存中的存储根整数-1在内存中一样因此。。。明白了么本回答被提问者采纳

main(){ char x=0xFFFF; printf("%d ",x--); }
main () { char x=0xFFFF; printf ("%d\\n",x--); } 结果是-1,为什麼? %d是整数输出格式,也就是说将0xffff作为整数输出。而char型别的0xFFFF在记忆体中的储存根整数-1在记忆体中一样因此。。。明白了麼 main(){char x=0xFFFF;printf("%d\\n",x--);}答案为-108.我想知道算的...

char x=0xFFFF;printf("%d\\n",x--)的输出结果是?我怀疑答案,所以请求...
0xFFFF 是16进制,转换成二进制为11111111 11111111 。char 类型是一个字节,明显溢出,只能取低八位(即后面的八个1),char是有符号字符型,11111111转化成十进制就是-1。

...main() { char x=0xFFFF;printf( %d\\n ,x--);}
【答案】:C 因为x=0x FFFF=11111111,因此当以整型形式输出时对应的数为一1。

main(){ char x=0xFFFF; printf("%d \\n",x--); }
char型不能直接拿来运算,这里输出是整型,所以报错,返回值是-1.好像记得越界或者什么错误的返回值都是-1,-1在这里不代表计算结果。

c语言这段码为何会输出-1?
1. char x=0xFFFF;指定值超出char表示的范围,因此高位数据被丢失,得到x=0xFF;2. printf("%d\\n", x--);这句在这里可以理解为:printf("%d\\n", x);和x=x-1;两条语句 在执行printf时会对x进行符号扩展【char表示有符号数据,所以会进行符号位扩展】,因为x的符号位为1,所以整个数据...

这输出为什么是—1?
1.char x=0xFFFF.char是单字节,也就是8位,而0xFFFF是4*4=16位。当把一个16位赋给只能存储8位的char时,问题就出现了,这时就会发生截断现象(truncation)。这时编译器一般会发出警告。当发生截断后,原来的16位只剩下8位。也就是x=-1;2.x--。x--的使用是:先使用x的值,后进行--...

main(){ char x=0xFFFF; printf("%d \\n",x--); }
0xFFFF是十六进制表示,转换为二进制为1111 1111 1111 1111,%d是将其用int型输出。二进制“1111 1111 1111 1111”的第一位(最高位)为1可知其是负数(最高位为0表示非负数),并且是用补码表示。由补码还原为原码的原则是:除符号位外,末尾减1后,各位取反:1111 1111 1111 1111 末尾减1:11...

这段码为何会输出-1?
x是0xFFFF,以%d打印就是将0xFFFF扩展为0xFFFFFFFF,以有符号10进制打印出来 x--返回的是x,因此 printf("%d\\n", x--);跟 printf("%d\\n", x);没区别,都是打印同一个数 0xFFFFFFFF,打印出来的就是-1

C语言~小问题,为什么结果是-1,谢谢~
FFFF是的2进制数是1111 1111 1111 1111 它的反码为1000 0000 0000 0000 符号位不变 补码就是1000 0000 0000 0001 一共16个1 占4个字节 x为char型 数据溢出 只能存储8个二进制数(符号位和后面7位) 就是1000 0001 符号位为1 就是-1 ...

C语言 题目
结果是-1。char x=0xddff; 最前面0x表示后面的数是十六进制。ddff是两个字节的一个数。而x是字符类型char,只能存储一个字节。按照微机原理,x存储了低位的ff,而最后打印出来的是%d,就是将x转化为整数类型,因为整数类型是两字节,所以x=0xffff。0xffff=-1,最后输出-1 ff 到 -1 怎么算 应该...

相似回答