关于C语言的o格式符的问题

我看的是谭浩强的 "C程序设计" 第一版... 很老的书啦.. 里面说 o格式符是以8进制形式输出无符号整数. 比如 -1在内存存放是. 11111111 a=-1 int a=-1; printf ("%d,%o,%x",a,a,a); 那么输出的是 -1,177777,ffff 我是想知道.. 为什么输出的-1在8进制里会变成-177777呢?还有16进制的ffff 这是有什么算法规则吗? 虽说无符号..但... 我不懂啊... 我最近自学,我什么都不懂.. 这个就是我计算机基础的入门... 关于这个问题..谁能解释下吗? 谢谢啦... 顺便多问个问题. 关于ANSI的字符代码要背吗? 比如 097是a 098是b 这样的.. 一共好像有300多个呢... 书上只写了200多个.. 谢谢各位了.!!!!!!!

1、电脑中存放的数(二进制)都是用补码表示的。
先说说原码。
把一个数的绝对值用二进制表示,然后在最高位添上一个符号位(正数添0,负数添1),得到的就是原码。
比如对于int型整数来说,字长16位,表示十进制数123和-234。
123表示为二进制为111
1011,补至16位即0000
0000
0111
1011,因为是正数,所以最高位(从左数第一位)写0。
所以123原码就是0000
0000
0111
1011
234表示为二进制为1110
1010,补至16位即0000
0000
1110
1010,因为是负数,所以最高位改为1
所以-234的原码就是1000
0000
0111
1011
整数X(二进制)补码的表示规则如下
若X大于等于0,则补码与源码相同;
若X小于0,则补码为-X的原码各位取反,然后再加1。
比如上面的-234,234的原码是0000
0000
0111
1011,欲求它的补码
先各位取反,得1111
1111
1000
0100,
再加1得1111
1111
1000
0101
同理,-1在计算机中的表示形式,首先1的原码为0000
0000
0000
0001
各位取反得1111
1111
1111
1110
再加1得1111
1111
1111
1111。
八进制和十六进制其实就是二进制的简略形式,因为一大堆的0和1很容易看错。
八进制就是把二进制数从低位(右边)开始,每3个数字一组对应到这三个数所对应的十进制数。因为是每三个数字一组,所以只有0-7这些数字有对于,8和9不会出现。
把1111
1111
1111
1111按每3个数一组分组,得到
1
111
111
111
111
111,最高位的1补上两个0
001
111
111
111
111
111
写成八进制就是177777。
同样十六进制也是,不过是4个数字一组。因为4个数字有16种组合,大于9的部分如下表示
二进制数
-
十进制数
-
十六进制数
1010
-
10
-
A
1011
-
11
-
B
1100
-
12
-
C
1101
-
13
-
D
1110
-
14
-
E
1111
-
15
-
F
所以1111
1111
1111
1111写成十六进制数就是FFFF。
至于那个字符代码,没有什么背的必要。都是查表。用到的时候看两眼就记得了,用完了就忘了。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答