主题:一个新手问题
shineysun
[专家分:650] 发布于 2008-03-17 01:47:00
main()
{
char x=0xFFFF;printf("%d\n",x--);
}
这里面的x=0xFFFF表示什么?
运行结果为什么是-1?
回复列表 (共4个回复)
沙发
f-wind [专家分:1240] 发布于 2008-03-17 12:05:00
应该是地址操作吧!
板凳
shineysun [专家分:650] 发布于 2008-03-17 23:33:00
0XFFFF是不是一个16进制值代表了65535?
3 楼
f-wind [专家分:1240] 发布于 2008-03-18 16:39:00
对
4 楼
amstudying [专家分:120] 发布于 2008-03-18 22:26:00
0xFFFF 是一个16进制的数,在计算机中 ,对负数来说 一般是用补码来表示的 。
举个例子(假如是16位的计算机) -2 的 原码形式是 1000 0000 0000 0010 (最高位是符号位,1表示负 ,0表示正) 但是在计算的时候 计算机就会转为它的补码也就是 各位取反 然后末位加1,符号位不变,就得到了 1111 1111 1111 1110 然后就通过这个补码来进行运算的 。
在你说的这个题目中 可以看到 -1 的原码是 1000 0000 0000 0001 那么它的反码是1111 1111 1111 1110 然后在末位加上1 就可以得到 1111 1111 1111 1111 则正好就是 0xFFFF 所以就会输出 -1 来了 。 计算机中的这种表示方法就像你看钟一样的 12点过了就是1点 又循环回去的 仔细想想吧
我来回复