下面的程序输出的结果为

honbaa 2010-05-26 02:43:38
#include "stdio.h"
main()
{
int a=-1;
printf("%d,%o,%u\n",a,a,a);
}
怎么算的啊,-1知道。177777是八进制,怎么算出来的呢。65535这个结果,也不知道怎么算出来的。希望得到详细的过程
...全文
103 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cattycat 2010-05-26
  • 打赏
  • 举报
回复
%d是-1,%u是32位全1的,%o八进制就是37777777777。实际上还是32位全1.
你可以在你的电脑附件的计算器上对照一下。
honbaa 2010-05-26
  • 打赏
  • 举报
回复
计算机是按照补吗输出的吗
renbin5566 2010-05-26
  • 打赏
  • 举报
回复
先转换成把绝对值转换成二进制。。再按位取反,,末尾加1.再转换成八进制或者十进制
lirg8405 2010-05-26
  • 打赏
  • 举报
回复
如果算了无符号数,那么就是
11111111 11111111 11111111 11111111 = 2^32-1
lirg8405 2010-05-26
  • 打赏
  • 举报
回复
32位的:
10000000 00000000 00000000 00000001
11111111 11111111 11111111 11111110
11111111 11111111 11111111 11111111
37777777777
Normandie007 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 logic0 的回复:]
如果是正数的话,三码一致,直接转换,但是由于正数和负数在原码、反码、补码转换上的差别,所以按照正数的求解思路去对负数进行求解是不对的。
正确的方法是:首先将负数用补码表示出来,然后再转换成八进制和十六进制(补码)即可。
[/Quote]
正解
wade_2003 2010-05-26
  • 打赏
  • 举报
回复
LZ去看看单片机中关于十进制,十六进制,八进制的东西撒
非兔子_Logic0 2010-05-26
  • 打赏
  • 举报
回复
如果是正数的话,三码一致,直接转换,但是由于正数和负数在原码、反码、补码转换上的差别,所以按照正数的求解思路去对负数进行求解是不对的。
正确的方法是:首先将负数用补码表示出来,然后再转换成八进制和十六进制(补码)即可。
lirg8405 2010-05-26
  • 打赏
  • 举报
回复
假设了8位,那么
10000001
11111110
11,111,111
最后就是377

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧