首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

《c primer plus》中关于%o的疑点

2012-10-09 
《c primer plus》中关于%o的疑问书中讲格式说明符%o对printf()是输出无符号的八进制数,而对scanf()是把其解

《c primer plus》中关于%o的疑问
书中讲格式说明符%o对printf()是输出无符号的八进制数,而对scanf()是把其解释成一个有符号的八进制数,为什么一个有符号,一个没符号,原理是什么,不是说只有十进制才有正负之分吗???

[解决办法]
意思就是printf是输出一个整形的二进制对应的八进制,是正数是负数是人类的想法。

但是scanf是为人类服务的,所以允许你输入-5或者5,这个5是8进制数,所以书中会说scanf期待的是有符号数,其实一旦-5进入到计算机,就是“-5”这个字符串,scanf的实现会把-5转成对应的二进制存起来,用unsigned还是signed存都一样,只要给它4字节,他才不管那是什么。

int n;
scanf("%o", &n); 你可以看到你传入的是一个地址&n而已,仅此而已。只不过scanf的算法会识别用户输入, 并将用户输入经过一番转化变成整形,填到内存里去。

热点排行