爱问知识人 爱问共享资料 医院库

C语言有关负整型数据输出的问题

首页

C语言有关负整型数据输出的问题

在教材中看到一到Printf函数在输出-1时,为什么以%o和%x输出会以补码的形式输出,而以%d输出时,而是-1,此时它是用原码吗?
这个问题我也是琢磨了一段时间,初步分析是这个可能的结果,真正的谜底可能就与库函数printf有关,期待高手进一步刨析......

提交回答

全部答案

    2018-08-07 02:07:45
  •   在机器中,所有的数都是以补码的形式存储的
    输出的形式不代表存储的形式
    你应该知道printf函数的第一个参数叫做什么名字(格式字符串),说白了,printf是根据这个字符串来格式那个数字的!你要什么格式,它就输出什么格式。
      
    你用%d输出,它定义的%d就是输出正负号和十进制整数值。你用%o输出,它定义就是不管什么负号不负号的把八进制输出出来。然而printf没有定义带符号八进制的输出格式字串而已(因为没有人习惯看到一个负的八进制或十六进制字符,只是感兴趣除外)
    其实,没有必要去琢磨printf到底是怎么输出的,在你能看到的层面上,机器处理数据都是16进制的,而且是没有 -的,你用反汇编软件,用WinHex,用UtralEdit打开一个文件,你看到的最多是十六进制,你看到二进制没有意义的,你看不明白,你也不需要看明白。
      
    即使说printf的代码是汇编写的,你看到了,它只不过把每一位转换成字符,写到输出缓冲区里面,还是看不到补码。
    再补充一句,也可以这么理解,你用%o或%x输出,printf把内存中的实际情况显示出来了,你用%d输出,printf自己在中间多了一次转换,让你看得更习惯了。
      

    z***

    2018-08-07 02:07:45

类似问题

换一换

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 175-194
返回
顶部
帮助 意见
反馈
关注
爱问

关注爱问微信公众号,开启知识之旅,随时随地了解最新资讯。

确定举报此问题

举报原因(必选):