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

来源:百度知道 编辑:UC知道 时间:2024/06/27 05:00:27
我看的是谭浩强的 "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的部分如下表示
二进制数