桂林到阳朔火车时刻表:关于C语言的问题??

来源:百度文库 编辑:神马品牌网 时间:2024/05/01 08:24:19
int a=-1;
printf("%x,%O,%d",a,a,a);
为什么这个小程序的输出结果是
ffff,177777,-1
为什么输出的结果会是ffff 和 177777
实在看不明白,要详细解释才给分

printf("%x,%O,%d",a,a,a);

%x,%O,%d是输出格式控制符。

这个我似乎解释不清~~~哈
%x 是按16进制表示
%o 是按8进制表示 这些你都知道吧
用windows 的计算器一算你就知道是对的 ~~~~~~~~~
进制转换要遵循一些默认的设定,也并不是完全符合规则,一切都是为了能让计算机的运算成功

楼上正解。。。。

呵呵~兄弟,你能问这个问题,一定是对编程有一定了解的。费话我就不多讲了。
先强调一个知识点,数字在计算机中是以补码的形式存贮的。
关于补码,如果你不太清楚的话,可以在网上查一下。
这里我先大概貌说明一下,
正数和零的补码是自己本身。例如:[1]补=00000001b [0]补=00000000b
负数的补码,是其绝对值接位取反+1。
例如,[-1]反=11111110b 再加1后得其补码,[-1]补=11111111b
---------------------------------------------------------
从楼主贴的答案来看,你用的应该是16位的编绎器,所以你的int类型占两个字节,像VC这样的32编绎器,int类型占四个字节。
所以,你的-1在计算机里存贮的二进制表示就为1111111111111111b(16个1)
----------------------------------------------------------
看到这里,楼主应该明白,为什么你的a,为什么在十六进制下变成FF了吧~~~呵呵。八进制也是一个道理。