C语言一个小问题求解答

include<stdio.h>voidmain(){inta=-2;printf(“%d,%o,%d\n”,a,a,--a);}为什么输出的是-3,3777777777... include<stdio.h>
void main()
{ int a=-2;
printf(“%d,%o,%d\n”,a,a,--a);
}
为什么输出的是-3,377777777775,-3而不是-2,37777777775,-3;顺便解释一下中间8进制的这个不是很懂。
展开
 我来答
R7世
2013-04-09
知道答主
回答量:44
采纳率:0%
帮助的人:24.4万
展开全部
记住c语言里的函数有多个参数时是从右向左计算的,所以先执行--a。o%输出无符号数,会把-3的符号位当成数的一部分
追问
自减我懂了,8进制把符号位当作其中的数我也知道,我想知道到底怎么算出来的,请帮我列举一下谢谢
追答
1.首先在16位编译器里int占4个字节,但是在32位编译器里int占8个字节,现在大多数编译器是32位的,显然你的也是2.在计算机里负数存成补码的形式,就是符号位不变其他位取反,比如1001存补码就是1110,32位的-3是1000...0010,取补码就是1111...1110,转换成八进制正好是37777777775
nigoole
2013-04-09 · TA获得超过1369个赞
知道小有建树答主
回答量:675
采纳率:71%
帮助的人:444万
展开全部
printf("%d,%o,%d\n",a,a,--a);的计算顺序是从右到左,先计算--a=-3;中间-2的8进制数就是那个 具体怎么算的 负数我还没弄明白,应该是补码算的吧, 你可以吧a=9在运行 结果为8,10,8.
8的8进制数=10.。
追问
正数我也懂,我想知道负数怎么算,并且我还想知道int占4个字节为什么输出的8进制位数那么多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式