关于C中进制的问题
int a=1,int b=-1;printf("%d,%d,%u,%u,%o,%o,%x,%x\n",a,b,a,b,a,b,a,b);
输出结果为:1,-1,1,65535,1,17777,1,ffff。
65535,17777,ffff是如何计算得出的?
但若a=1,b=1时输出结果都为1,又是为什么那?
----------------解决方案--------------------------------------------------------
丑...
[此贴子已经被作者于2007-1-28 12:25:05编辑过]
----------------解决方案--------------------------------------------------------
在计算机中所有信息都是用二进制数编码来表示的,数字也不例外。正负符号也进行了数字化:编码的最高位用来表示符号,正数最高位为0,负数为1;正数的编码就是将这个数转换成二进制数然后在前面加0,补足到规定编码的位数,而负数却是用补码来表示的。要求一个负数的补码,可先求出它的相反数的编码,然后逐位取反,末位加1。
在C中,int类型一般用16位二进制表示,它的取值范围为-32768~+32767。例如1,在C中的编码就是0000000000000001;而-1的编码是:1111111111111111。
当把int 的-1当作无符号数输出时,就变成了65535,当作八进制数输出时,就成了:177777;当作十六进制数时:ffff。
----------------解决方案--------------------------------------------------------
数据在计算机的存储是通过它的补码形式存储
知道这点后就明白上面的结果了
[此贴子已经被作者于2007-1-29 8:15:50编辑过]
----------------解决方案--------------------------------------------------------
谢谢大家了
----------------解决方案--------------------------------------------------------
4楼回答错了,应该是补码,而不是反码。
----------------解决方案--------------------------------------------------------
哦对
汗
说错了
呵呵真对不起
----------------解决方案--------------------------------------------------------