关于C语言基础的问题,要求解过程1

1.#include "stdio.h"
void main()
{
int a=-1;
printf("%d,%o",a,a);
}
为什么输出是-1,177777
重点解释后者

第1个回答  2008-01-23
第一个答案
%d的意思是是10进制进行表达
直接输出-1

第二个答案
计算机中
负数的二进制存储方式是以补码形式存储的
也就是说对于16位处理器来说-1其实是对1000000000000001除首位外取反
跌倒其反码1111111111111110再加一 得到其补码
1111111111111111

而%o的意思是输出8进制数
就是对1111111111111111转化为8进制
也就是177777
回答者:accesser - 经理 四级 1-23 13:40

相当专业
第2个回答  2008-01-23
第一个答案
%d的意思是是10进制进行表达
直接输出-1

第二个答案
计算机中
负数的二进制存储方式是以补码形式存储的
也就是说对于16位处理器来说-1其实是对1000000000000001除首位外取反
跌倒其反码1111111111111110再加一 得到其补码
1111111111111111

而%o的意思是输出8进制数
就是对1111111111111111转化为8进制
也就是177777本回答被提问者采纳
第3个回答  2008-01-23
8进制的7就是2进制111
所以177777
就是11111111 11111111

--------------------------------------------------------

那为什么不是
二进制的1111等于八进制的17
然后是17171717呢?

。。。。。。。。。。。。。。。。

--------------------------------------------------------

你这么看吧
把一个2进制换为8进制,
从后往前,3位分节,每节是8进制的多少就是多少

111为7,所以1111,是8进制17,对的.
但11111分为11 111,那就是8进制37了
101111分为101 111,那就是8进制57了
1010101011分为1 010 101 011,那就是8进制1253

反过来8进制17171717对应的是2进制是
1 111 001 111 001 111 001 111

--------------------------------------------------------

十进制中逢10进1 有0 1 2 3 4 5 6 7 8 9九个数字
八进制中逢8进一 有0 1 2 3 4 5 6 7八个数字
二进制中逢2进一 有0 1两个数字
-1取绝对值是 1 二进制的原码是0000 0000 0000 0001
补码是1111 1111 1111 1110 然后取反加1就是 1111 1111 1111 1111
转化成八进制是177777
相似回答