《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的算法会识别用户输入, 并将用户输入经过一番转化变成整形,填到内存里去。