f904399233 发表于 2016-6-20 08:51:29

格式输入输出

在《小甲鱼零基础入门学习C语言》中“第三章顺序程序设计”PPT第16页有如下格式输入输出问题:
当在编辑器中输入以下代码:
void main()
{
        int a=-10;
        printf("a=% o\n",a);
}
(其中%与o之间有空格)
代码输出结果为:
请问a的输出值为什么不是-12呢?

n0noper 发表于 2016-6-20 09:26:12


楼主,你使用 %o 是以8进制输出。
八进制和十六进制都是补码形式输出 (这是我理解的),所以输出了这个东西。

把上边那个数字 转换成16进制更容易看出来。FFFFFFF6 - 也就是-10的补码

f904399233 发表于 2016-6-20 23:19:02

n0noper 发表于 2016-6-20 09:26
楼主,你使用 %o 是以8进制输出。
八进制和十六进制都是补码形式输出 (这是我理解的),所以输出了这个东 ...

soga,理解啦!赞!谢谢你~

n0noper 发表于 2016-6-21 08:41:22

f904399233 发表于 2016-6-20 23:19
soga,理解啦!赞!谢谢你~


如果解决了,记得评分 关帖哟~~~

学习电脑 发表于 2016-6-22 11:41:26

不知道楼主懂不懂补码

-5的补码是 先求5的二进制代码,如果是int类型占32个字节,那就是00000000000000000000000000001010

按位取反后为
11111111111111111111111111110101
末尾加1
11111111111111111111111111110110这个就是-5的补码

接下来把二进制代码转化为八进制,从右向左,每3个位一组,不够位数前面取0

         011,111,111,111,111,111,111,111,111,110,110,
转      ↓    ↓   ↓   ↓   ↓    ↓   ↓   ↓    ↓      ↓   ↓
化      3   7   7    7    7      7   7   7   7      6      6






就是这样,懂不懂??

f904399233 发表于 2016-6-22 14:48:50

学习电脑 发表于 2016-6-22 11:41
不知道楼主懂不懂补码

-5的补码是 先求5的二进制代码,如果是int类型占32个字节,那就是000000000000000 ...

理解啦~3Q

学习电脑 发表于 2016-6-22 15:49:06

那就好
页: [1]
查看完整版本: 格式输入输出