二,八,一○,一六进制的转换:
2. 数制之间的转换(1)十进制整数转换为二进制整数
采用基数2连续去除该十进制整数,直至商等于“0”为止,然后逆序排列余数。
(2)十进制小数转化为二进制小数
连续用基数2去乘以该十进制小数,直至乘积的小数部分等于“0”,然后顺序排列每次乘积的整数部分。
(3)十进制整数转换为八进制整数或十六进制整数
采用基数8或基数16连续去除该十进制整数,直至商等于“0”为止,然后逆序排列所得到的余数。
(4)十进制小数转换为八进制小数或十六进制小数
连续用基数8或基数16去乘以该十进制小数,直至乘积的小数部分等于“0”,然后顺序排列每次乘积的整数部分。
(5)二、八、十六进制数转换为十进制数
用其各位所对应的系数,按“位权展开求和”的方法就可以得到。其基数分别为2、8、16。
(6)二进制数转换为八进制数
从小数点开始分别向左或向右,将每3位二进制数分成1组,不足3位数的补0,然后将每组用1位八进制数表示即可。
(7)八进制数转换为二进制数
将每位八进制数用3位二进制数表示即可。
(8)二进制数转换为十六进制数
从小数点开始分别向左或向右,将每4位二进制数分成1组,不足4位的补0,然后将每组用一位十六进制数表示即可。
(9)十六进制数转换为二进制数
将每位十六进制数用4位二进制数表示即可。
【例2.1】将十进制整数(105)10转换为二进制整数,采用“除2倒取余”的方法,过程如下:
2 ︳105
2 ︳52 余数为1
2 ︳26 余数为0
2 ︳13 余数为0
2 ︳6 余数为1
2 ︳3 余数为0
2 ︳1 余数为1
0 余数为1
所以,(105)10=(1101001)2
【例2.2】将十进制小数(0.8125)10转换为二进制小数,采用“乘2顺取整”的方法,过程如下:
0.8125×2=1.625 取整数位1
0.625×2=1.25 取整数位1
0.25×2=0.5 取整数位0
0.5×2=1.0 取整数位1
所以,(0.8125)10=(0.1101)2如果出现乘积的小数部分一直不为“0”,则可以根据精度的要求截取一定的位数即可。
【例2.3】将十进制整数(2347)10转换为十六进制整数,采用“除16倒取余”的方法,过程如下:
16 ︳2347
16 ︳146 余数为11(十六进制数为B)
16 ︳ 9 余数为2
0 余数为9
所以,(2347)10=(92B)16
含小数位的二进制数转为10进制数:
小数部分从小数点位置开始:1/2,1/4,1/8,1/16....
即:1010.1011=>8+2+1/2+1/8+1/16
(“^”代表幂)
1101.0111=>1*2^3+1*2^2+0*2^1+1*2^0+0*2^(-1)+1*2^(-2)+1*2^(-3)+1*2^(-4)
原码,反码,补码,移码
原码
正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。用这样的表示方法得到的就是数的原码。
【例2.13】当机器字长为8位二进制数时:
X=+1011011 [X]原码=01011011
Y=+1011011 [Y]原码=11011011
[+1]原码=00000001 [-1]原码=10000001
[+127]原码=01111111 [-127]原码=11111111
原码表示的整数范围是:
-(2n-1-1)~+(2n-1-1),其中n为机器字长。
则:8位二进制原码表示的整数范围是-127~+127
16位二进制原码表示的整数范围是-32767~+32767
反码
对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。【例2.14】当机器字长为8位二进制数时:
X=+1011011 [X]原码=01011011 [X]反码=01011011
Y=-1011011 [Y]原码=11011011 [Y]反码=10100100
[+1]反码=00000001 [-1]反码=11111110
[+127]反码=01111111 [-127]反码=10000000
负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。 反码表示的整数范围与原码相同。
补码
正数的补码与其原码相同,负数的补码为其反码在最低位加1。
【例2.15】(1)X=+1011011 (2) Y=-1011011
(1)根据定义有: [X]原码=01011011 [X]补码=01011011
(2) 根据定义有: [Y]原码=11011011 [Y]反码=10100100
[Y]补码=10100101
补码表示的整数范围是-2n-1~+(2n-1-1),其中n为机器字长。
则:8位二进制补码表示的整数范围是-128~+127
16位二进制补码表示的整数范围是-32768~+32767
当运算结果超出这个范围时,就不能正确表示数了,此时称为溢出。
补码与真值之间的转换
正数补码的真值等于补码的本身;负数补码转换为其真值时,将负数补码按位求反,末位加1,即可得到该负数补码对应的真值的绝对值。
【例2.16】[X]补码=01011001B,[X]补码=11011001B,分别求其真值X。
(1)[X]补码代表的数是正数,其真值:
X=+1011001B
=+(1×26+1×24+1×23+1×20)
=+(64+16+8+1)
=+(89)D
(2)[X]补码代表的数是负数,则真值:
X=-([1011001]求反+1)B
=-(0100110+1)B
=-(0100111)B
=-(1×25+1×22+1×21+1×20)
=-(32+4+2+1)
=-(39)D
移码:
移码(又叫增码)是符号位取反的补码,一般用做浮点数的补码,引入的目的是为了保证浮点数的机器零为全0。
①移码的定义:设由1位符号位和n位数值位组成的阶码,则 [X]移=2En + X -2n≤X ≤ 2n
例如: X=+1011 [X]移=11011 符号位“1”表示正号
X=-1011 [X]移=00101 符号位“0”表示负号
②移码与补码的关系: [X]移与[X]补的关系是符号位互为相反数(仅符号位不同),
例如: X=+1011 [X]移=11011 [X]补=01011
X=-1011 [X]移=00101 [X]补=10101