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进制的这个不是很懂。 展开
void main()
{ int a=-2;
printf(“%d,%o,%d\n”,a,a,--a);
}
为什么输出的是-3,377777777775,-3而不是-2,37777777775,-3;顺便解释一下中间8进制的这个不是很懂。 展开
2个回答
展开全部
记住c语言里的函数有多个参数时是从右向左计算的,所以先执行--a。o%输出无符号数,会把-3的符号位当成数的一部分
追问
自减我懂了,8进制把符号位当作其中的数我也知道,我想知道到底怎么算出来的,请帮我列举一下谢谢
追答
1.首先在16位编译器里int占4个字节,但是在32位编译器里int占8个字节,现在大多数编译器是32位的,显然你的也是2.在计算机里负数存成补码的形式,就是符号位不变其他位取反,比如1001存补码就是1110,32位的-3是1000...0010,取补码就是1111...1110,转换成八进制正好是37777777775
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询