回 帖 发 新 帖 刷新版面

主题:一个新手问题

main()
{
  char x=0xFFFF;printf("%d\n",x--);
}

这里面的x=0xFFFF表示什么?
运行结果为什么是-1?

回复列表 (共4个回复)

沙发

应该是地址操作吧!

板凳

0XFFFF是不是一个16进制值代表了65535?

3 楼

4 楼


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点  又循环回去的  仔细想想吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册