
一个很急的C语言问题!!
main(){inta=-1;printf("%d,%o,%x",a,a,a);}输出为-1,177777,ffff为什么输出的八进制和十六进制是补码形式,而非数值本身的...
main()
{int a=-1;
printf("%d,%o,%x",a,a,a);
}
输出为-1,177777,ffff
为什么输出的八进制和十六进制是补码形式,而非数值本身的八进制和十六进制的表示啊,但十进制确是数值本身?还请大侠详细解释下这个问题。 展开
{int a=-1;
printf("%d,%o,%x",a,a,a);
}
输出为-1,177777,ffff
为什么输出的八进制和十六进制是补码形式,而非数值本身的八进制和十六进制的表示啊,但十进制确是数值本身?还请大侠详细解释下这个问题。 展开
2个回答
展开全部
因为你是int
所以最高位是符号位
又因为你是负数
所以最高位是1
剩余位是补码
%d格式识别符号位
而16进制和8进制输出不识别符号位
它们是属于 unsigned型
所以它们输出的是 16进制和8进制的 32767
所以最高位是符号位
又因为你是负数
所以最高位是1
剩余位是补码
%d格式识别符号位
而16进制和8进制输出不识别符号位
它们是属于 unsigned型
所以它们输出的是 16进制和8进制的 32767
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询