计算机硬件基础(二)进制的转换
十进制 转 各种进制
整数部分采用 除法 ,小数部分采用乘法
比如 : 十进制数 58.125 转换为 二进制
整数部分:
将58 连续除 2 取余数
第一次取到 0 (58/2=29。。。0)
第二次取到 (29/2=14.。。。1)
第三次取到 (14/2=7.。。。0)
第四次取到 (7/2=3 。。.1)
第五次取到 (3/2=1.。。。1)
第六次取到 (1/2=0。。。。1)
然后向上依次取余数 1110 10
小数部分: 小数部分连续乘2 取整数
第一次 0.125*2=0.25 取 0
第二次 0.25*2=0.5 取 0
第三次 0.5*2=1.0 取 1
然后向下依次取整数 001
最后加上0. 小数部分就是 0.001B
即 (58.125)D=(111010.001)B
整数部分太过繁琐 所以我将二进制的依次写出
128 64 32 16 8 4 2 1
然后很快就能把整数部分 58 写成111010
再以十进制转16进制为例
将十进制58.125 转为十六进制
整数部分:
58/16=3.。。10
3/16=0.。。。3
向上依次取余数 3 A (十六进制里10是A)
这里也能用那种简化的方法,与二进制不同,需要将58拆分56可以拆成16的倍数与(56减n个16的倍数)的和。这里n为3 也就是48和(58-48).也就能得到3A的结果
小数部分:
0.125*16=2
再在2 的前面加上 0. 小数部分就是0.2
即(58.125)D= 3A.2H
说明: 后缀 D 表示十进制 B 表示二进制 H 表示16进制 O表示八进制
各种进制转十进制
按位乘以指定进制的次数,
二进制 111010.001 转 十进制
整数部分
1 1 1 0 1 0
1*2^5 1*2^4 1^2^3 0*2^2 1*2^1 0* 2^0
小数部分
0 0 1
0*2^-1 0*2^-2 0*2^-3
最后把他们相加就可以了
十六进制 3A.2 转十进制
整数部分
3 A
3*16^1 10*16^0
小数部分
2*16^-1
在把他们相加
二进制转各种进制
转十进制 已经讲了
转八进制是:
二进制的“10110111011”
换八进制时,从右到左,三位一组,不够补0,即成了:
010 110 111 011
然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加,如:
010 = 2
110 = 4+2 = 6
111 = 4+2+1 = 7
011 = 2+1 = 3
结果为:2673
十六进制换二进制的方法也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为:
0101 1011 1011
运算为:
0101 = 4+1 = 5
1011 = 8+2+1 = 11(由于10为A,所以11即B)
1011 = 8+2+1 = 11(由于10为A,所以11即B)
结果为:5BB
各种进制转二进制 每位拆分 转为二进制
十六进制转二进制
八进制转二进制
BCD码的转换
BCD码(Binary-Coded Decimal),用4位二进制数来表示1位十进制数中的0~9这10个数码
缩BCD码与非压缩BCD码的区别—— 压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数。例如10010110B表示十进制数96D;非压缩BCD码用1个字节表示一位十进制数,高四位总是0000,低4位的00001001表示09.例如00001000B表示十进制数8.
BCD码的运算法则
BCD码的运算规则:BCD码是十进制数,而运算器对数据做加减运算时,都是按二进制运算规则进行处理的。这样,当将 BCD码传送给运算器进行运算时,其结果需要修正。修正的规则是:当两个BCD码相加,如果和等于或小于 1001(即十进制数9),不需要修正;如果相加之和在 1010 到1111(即十六进制数 0AH~0FH)之间,则需加 6 进行修正;如果相加时,本位产生了进位,也需加 6 进行修正。这样做的原因是,机器按二进制相加,所以 4 位二进制数相加时,是按“逢十六进一”的原则进行运算的,而实质上是 2 个十进制数相加,应该按“逢十进一”的原则相加,16 与10相差 6,所以当和超过 9或有进位时,都要加 6 进行修正。下面举例说明。
进一”的原则相加,16 与10相差 6,所以当和超过 9或有进位时,都要加 6 进行修正。下面举例说明。