关于基数进制转换方面的问题

来源:互联网 发布:淘宝类目哪个是免费的 编辑:程序博客网 时间:2024/06/05 04:01
首先学习几个概念:基数,权值。

    逢n进一的n就是基数,基数为几就有几个数字,如二进制基数为二,则有0,1两个;八进制基数为八有0,1,2,3,4,5,6,7八个。总之从0开始,最后一位位n-1。而如十六进制等基数超过十的,从十开始为A(相当于10进制的10),B,C,D,E,F(相当于10进制的15)。

    权可以这样理解,一种进制的某一个数的每位都有一个权值m,并且权值为位数减一,如个位上的数的权值为0(位数1-1=0),十位为1(位数2-1=1)。

    各个进制之间的转化一般分为两类。

    十进制转换为其他进制:可以概括为“除基取余”。如十进制的12化为16进制,12/16=0余12,但十六进制是用C来表示的,所以十进制的10就是 12进制的C;又如十进制30化为十六进制,30/16=1余14,第二次用商14/16=0余14,则十进制30转化为十六进制为1E(由后往前取),其他类推。十进制转化为二进制也是如此,如9/2=4余1,4/2=2余0,2/2=1余0,1/2=0余1,也就是1001了。10进制转化为其它进制,也是一样,但不常用,所以就不说了。

    其它进制转化为十进制:可以概括为“按权展开”。知道了权值m,就可以转化了。 首先,每一位的位数乘以基数n的m次方,如八进制个位4,4x8^0=4(8^0等于8的0次方),百位4,4x8^2=256.最后加总。

    另外一般默认十进制以d结尾,八进制为o,二进制为b,十六进制为h。

    ================================================
    下面来练习一下:
    1.420d=( )h
    2.420h=( )d
    3.110100100b=( )d
    4.420d=( )b
    ================================================
    答案:1、1A4;2、1056;3、420;4、110100100
    ================================================

    2进制和16进制的转化:有些情况中,常会遇到2进制和16进制转化如果通过二进制转换为十进制,再转换为十六进制完成,有很大麻烦,下面有一种方法,提高效率。

    二进制到十六进制的转换。我们可以将二进制数由右至左分为几部分,每一部分有四位(因为2的4次方为16),不足四位的补0,如10111b,可分为 0001(补了3个0)和0111两部分。然后将两部分分别化为十六进制,第一个是1,第二个是7。最后合起来,为17h。

    十六进制到二进制的转换。同理,我们可将十六进制的每一位,一分为四,再合并即可。如13h,分为1和3两部分,在一分为四,0001和0011,合并去0,就是10011。

    进制的转化,就讲到这里,修改的一个要点,相信阁下已经掌握了。

第三节 数据存储

    位、字节:

    在前面,大家知道了二进制的权为2,即它只有0和1两个数字组成,表示及运算都十分简单。因此在计算机中就把它作为数据的基本单位‘位’(bit),然后再把八个这样的位组成一个字节(byte),如
1001,0011。

    好了,运用前面的进制转换知识将二进制1111,1111转换为十进制,为255,于是可知1字节的表示范围是0(0000,0000)--255 (1111,1111)。在计算机中常用来表示数据的有二字节,四字节,八字节,十字节等,他们都可依照上法求的范围。(在FPE2000中的8,16, 32就是指一,二,四字节)。

    另外,浮点数(即带小数点的小数)一般用四字节以上表示,视精度而定,对于初学者,也就不多说了。

    原码、反码、补码: 

    原码:一字节数据可表示的范围是0--255,那么负数又怎么表示呢?计算机中是这样规定的,用一个数的最高一位表示正负,0为正,1为负。例如 0111,1111转换为十进制为127,1111,1111转换为十进制为-127,由此我们知一字节的范围为-127--127,其他字节的范围类推。

    反码:上面讲的都是原码表示法,可在计算机中的数据都是以补码存放的,只有这样才能减轻cpu的负担。提到补码,就不得不提反码了。计算机中是这样规定反码的,如果是正数,则按原码形式不变,如127仍为0111,1111;而如果为负数则,第一位为1,其他各位取反(即0变为1,1变为0),如原码- 127(1111,1111),表示为1000,0000。

    补码:补码同上,如果是正数,则按原码形式不变,如127仍为0111,1111;如果为负数则除第一位为1外,其他各位取反加1,如-127,先取反为 1000,0000,然后加1,为1000,0001。但1000,0000比较特殊,用它来表示-128,由此我们知补码可表示的范围是-128-- 127(因为-64d为1000,000b反码为1111,1111b补码+1不能用2byte表示)。

    数据存储: 

    现在把所有的有用的数据集中起来放在一起,并取一个名字来代表这些数据的集合,这就是一个文件了。如存盘文件就是将游戏中某一场景的关键数据集中记录到一个文件中,那么下次读取这些数据也就可以接着玩了。

    而且我们知道文件中数据的存放是有序的,以字节为单位,分别给他们编号,第一个字节为0,第二个为1……一定要注意的是第一个字节是0而不是1,这在后面会多次碰到。在许多地方所指的地址就是这些编号了。如一个二字节的数据,其第一个字节的地址为3,则整个数据的地址就为3。
    另外注意的一点是,在内存(即文件)中二,四等多字节的数据,其存放的顺序是颠倒的;十六进制AA BB,你在编辑工具中将看到BB AA。
原创粉丝点击