一个很急的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
为什么输出的八进制和十六进制是补码形式,而非数值本身的八进制和十六进制的表示啊,但十进制确是数值本身?还请大侠详细解释下这个问题。
展开
 我来答
dark___templar
2009-08-03 · TA获得超过280个赞
知道小有建树答主
回答量:248
采纳率:0%
帮助的人:278万
展开全部
因为你是int
所以最高位是符号位
又因为你是负数
所以最高位是1
剩余位是补码
%d格式识别符号位
而16进制和8进制输出不识别符号位
它们是属于 unsigned型
所以它们输出的是 16进制和8进制的 32767
562738607
2009-08-03 · TA获得超过1261个赞
知道小有建树答主
回答量:1015
采纳率:0%
帮助的人:894万
展开全部
-1在内存单元中以补码的形式存放为十六个1所以%x输出为ffff(4个二进制的1为1个十六进制的f),%o输出为177777(3个二进制的7为一个八进制的7)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式