石家庄金正戴斯酒店:一个编程初学者的疑惑

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 05:44:04
本人是编程初学者,我想请问为什么:printf("%d,%o,%x\n",-1,-1,-1);的输出结果为:-1,177777,ffff,是怎么得到的?具体应该怎样计算可以得到这样的结果?回答请尽量详细一些。

楼主的系统中整数是用16位二进制数表示的,-1表示为1111111111111111。
二进制转化为八进制时,从右往左,每3位转成一个八进制数,即
(二进制)1 111 111 111 111 111
(八进制)1 7 7 7 7 7

二进制转化为十六进制时,从右往左,每4位转成一个十六进制数,即
(二进制)1111 1111 1111 1111
(十六进制) F F F F

以上解释都是假设楼主知道什么是二、八、十六进制数,如果不知道,解释起来好麻烦,我就偷懒不解释了。

因为-1在内存里表示为(11111111)

对于带符号位的十进制表示法来讲这个值就是-1;

对于八进制(不带符号位)表示法来讲这个值就是177777;

对于十六进制(不带符号位)表示法来讲这个值就是ffff ;

负数在计算机中表示为 其绝对值的 补数,
即 -x= ~x+1 =x的逐位求反+1
-1= ~1+1=1111 1111 1111 1110 +1=1111 1111 1111 1111
=(八进制)1 7 7 7 7 7
=(十六进制) F F F F

%d是10进制整数,%o是8进制,%x是十六进制。
8进制和16进制都是无符号整数,输出不带符号。
-1用10进制整数格式输出结果为-1;
当-1用8进制和16进制都是无符号整数输出时,无符号整数范围为0-65535,即0到[2^16-1],-1超出范围,所以值转化为8进制和16进制都是无符号整数就为177777和ffff

前面两位不是已经说得很清楚了吗?
就是十进制的-1在进行进制转化时输出的用不同进制表示的值啊!

关于177777与ffff具体是怎么得到的,请问一下?

谢了,顶!!!!!!!!!!