卧铣:还是C语言的

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/12 07:34:52
int a=-1;
printf("%x,%O,%d",a,a,a);
为什么这个小程序的输出结果是
ffff,177777,-1
为什么输出结果会是ffff 和 177777
实在看不明白,要详细解释,本人能看明白才给分

%x是16进制显示,%o是8进制显示,%d是十进制显示

-1的二进制码的计算方法是 1的二进制按位取反再加一
0000 0000 0000 00001
取反: 1111 1111 1111 1110
再加一: 1111 1111 1111 1111
十六进制就是 1111 1111 1111 1111 = ffff
八进制就是 1 111 111 111 111 111 = 17777

-1 在内存中的存储就是 11111111 11111111 11111111 11111111
这叫补码。

%x 就是小写十六进制输出,就是 ffff
%O 就是八进制输出,就是 177777

汗 好象都是一个人问个
楼主 tianlong_80 写得详细~,正解!!!!!!!!!!

-1的二进制补码是:1111 1111 1111 1111
将它换成16进制就是 ffff
将它换成8进制就是 1777777

应为%x是用16进制输出,%O是8进制,%d就是普通的DOUBLE型,所以输出的会是那样!

已经记不清是第几个人问这个问题了。