进制转换和原码、反码、补码

进制转换

进制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制、八进制、十进制与十六进制,它们之间区别在于数运算时是逢几进一位。比如二进制是逢2进一位,十进制也就是我们常用的0-9是逢10进一位。

后缀H表示16进制;B表示2进制;O表示8进制;D表示10进制(二进制是B,十进制是D,八进制O)。

前缀0开始,表示8进制,比如0123,表示8进制的(123); 以0x开始,表示16进制,比如0x123,表示16进制的123。

计算机中常用十六进制是逢16进1的计数制,采用数字0~9和字母A~F共16个计数:

十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F

十进制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

用十六进制表示:E+D=1B(1*161+B*160 = 27)

进制转换的理论

1、二进制数、十六进制数转换为十进制数:用按权展开法

把一个任意R进制数an an-1 ...a1a0.a-1 a-2...a-m转换成十进制数,其十进制数值为每一位数字与其位权之积的和。

an×Rn + an-1×Rn-1 +…+ a1×R1 + a0×R0 + a-1 ×R-1+ a-2×R-2+ …+ a-m×R-m

2、十进制转化成R进制

十进制数轮换成R进制数要分两个部分:

  • 整数部分:除R取余数,直到商为0,得到的余数即为二进数各位的数码,余数从右到左排列(反序排 列)。
  • 小数部分:乘R取整数,得到的整数即为二进数各位的数码,整数从左到右排列(顺序排列)。

3、十六进制转化成二进制

每一位十六进制数对应二进制的四位,逐位展开。

4、二进制转化成十六进制

将二进制数从小数点开始分别向左(对二进制整数)或向右(对二进制小数)每四位组成一组,不足四位补零。

进制转换的具体实现

二进制转换成十进制

任何一个二进制数的值都用它的按位权展开式表示。

例如:将二进制数(10101.11)2转换成十进制数。

(10101.11)21*24+0*23+1*22+0*21+1*201*2-1+1*2-2=24+22+20+2-1+2-2=(21.75)10

十进制整数转换成二进制

将十进制整数转换成二进制整数采用“除2取倒余法”。

即将十进制整数除以2,得到一个商和一个余数;再将商除以2,又得到一个商和一个余数;

以此类推,直到商等于零为止。

每次得到的余数的倒排列,就是对应二进制数的各位数。

于是,结果是余数的倒排列,即为:

(37)10=(a5a4a3a2a1a0)2=(100101)2

十进制小数转换成二进制小数

十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的正数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,此时0或1为二进制的最后一位。或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
十进制小数转二进制
如:0.625=(0.101)B
0.625*2=1.25======取出整数部分1
0.25*2=0.5========取出整数部分0
0.5*2=1==========取出整数部分1
再如:0.7=(0.1 0110 0110...)B
0.7*2=1.4========取出整数部分1
0.4*2=0.8========取出整数部分0
0.8*2=1.6========取出整数部分1
0.6*2=1.2========取出整数部分1
0.2*2=0.4========取出整数部分0
0.4*2=0.8========取出整数部分0
0.8*2=1.6========取出整数部分1
0.6*2=1.2========取出整数部分1
0.2*2=0.4========取出整数部分0

十六进制转为二进制

由于24=16,所以每一位十六进制数要用四位二进制数来表示,也就是将每一位十六进制数表示成四位二进制数。

例:将十六进制数(B6E.9)16转换成二进制数为:

B  6  E .  9

1011 0110 1110 . 1001

即(B6E.9)16=(101101101110.1001)2

二进制数转为十六进制

将二进制数转换成十六进制数是将二进数的整数部分从右向左每四位一组,每一组为一位十六进制整数,不足四位时,在前面补0;

而二进制小数转换成十六进制小数是将二进制小数部分从左向右每四位一组,每一组为一位十六进制小数。

最后一组不足四位时,应在后面用0补足四位。

例:二进制数(1010101011.0110)2,转换成十六进制数为:

0010 1010 1011 . 0110

2  A  B  . 6

即:(10 1010 1011.0110)2=(2AB.6)16

 

posted @ 2022-07-13 13:50  残城碎梦  阅读(1028)  评论(0编辑  收藏  举报