计算机进制转换

137 阅读5分钟

1. 二进制与十进制

1.1. 加权法/按权展开法

R进制转十进制使用按权展开法,其具体操作方式为:将R进制的每一位数值用Rᴷ表示,即幂的底数是R,指数为K,k与该位与小数点之间的位置有关。当该位位于小数点的左边,k值是该位与小数点之间数码的个数,而当该位位于小数点的右边,k值是负值,其绝对值是该数与小数点之间数码的个数加1。

简单的说,就是每一位数与当前位的权值相乘后的结果累加起来。

例如二进制111转换为十进制?

111=1✖️2²+1✖️2¹+1✖️2⁰=4+2+1=7

1.2 短除法/除基取余法

十进制转二进制使用短除法(循环除基直到商为0,从下往上取余数

例如将94转换为二进制?

2|94 --余 0

2|47 --- 1

2|23 --- 1

2|11 --- 1

2|5 --- 1

2|2 --- 0

2|1 ---1

0

答案:1011110

1.3 凑位权法

十进制转二进制使用凑位权法

位号1110987654321
k109876543210
2ᴷ10245122561286432168421

例如将7、94转化为二进制,使用多个位置的权重凑成7、94即可。

7:离它最近的是2²=4,还差3,2¹=2,还差1,2⁰=1,刚好4+2+1=7,在对应的位号上放1,所以等于111

94: 离它最近的是2⁶=64,还差30,离30最近的是2⁴=16,还差14,离14最近的是2³=8,还差6,2²=4,还差2,2¹=2,所以第7位、第5位、第4位、第3位、第2位都是1,其余位是0,得到1011110

1.4 十进制转二进制的规律

image.png

2. 二进制与十六进制

进制数码基数位权
十进制(D)0,1,2,3,4,5,6,7,8,91010ᴷ
二进制(B)0,122ᴷ
十六进制(H)0~9,A,B,C,D,E,F1616ᴷ

在计算机进程中,主要是二进制作为底层机制,但是在计算机发展历程中,由于二进制位数过长,考虑把它压缩成十六进制来进行存储,那么二进制十六进制有什么互转关系呢?一个进制表示十六进制最大的数码是15,那这个15转成二进制1111,所以对于十六进制二进制转换的时候,1位十六进制最多需要4位二进制来表示。

截屏2024-05-30 14.38.56.png

我们在进行转换的时候,可以采用分组法将二进制的字符串分为4位一组每四位二进制可以转换1位十六进制,以此来进行转换。如果转换的时候发现没有和4成倍数的关系,位数不够在高位补0,表示没有任何含义的补位,这时也能凑4位一组。转换成4位一组之后,把4位二进制转换成十六进制,二进制要么是0不用加,要么是1要累加位权,1110=2³+2²+2¹+2⁰=8+4+2+1,我们很多时候看到的8421码就是这种权值的累计,这时除了0不用加,其他的都加,就是1110=8+4+2=14=E。同理1000=2³=8,1000 1110转成十六进制就是8E

也叫8421法

image.png

思考题

1. 内存地址中31B5H转换为二进制是多少?

3=2¹+2⁰=11=0011

1=2⁰=1=0001

B=11=1011

5=101=0101

31B5H=0011 0001 1011 0101

2. 二进制1111转换成十进制是多少?

1111=2³+2²+2¹+2⁰=8+4+2+1=15

如果是转十六进制,它就是可以用一位十六进制字符表示F

单位转换

  • 二进制:bit位
  • 字节:Byte=8bit
  • 字长:根据题干/计算机定义
  • 1k=1024=2¹⁰
  • 1M=1024k=1024✖️1024=2²⁰
  • 1G=1024M=1024✖️1024✖️1024=2³⁰

典型应用题型

1. 内存编址计算

  • 存储单元
    • 存储单元个数=最大地址-最小地址+1
  • 编码内容
    • 按字编址:存储体的存储单元是字存储单元,即最小存址单位是一个字。
    • 按字节编址:存储体的存储单元是字节存储单元,即最小存址单位是一个字节。(无特殊说明,默认按字节编址)
  • 总容量=存储单元个数✖️编码内容
    • 根据存储器所需容量和选定的存储芯片的容量,就可以计算出所需芯片的总数,即:总片数=总容量/每片的容量

截屏2024-05-30 15.22.56.png

按字节编址:1B = 8bit; 8bit为一坨

存储单元个数=最大地址-最小地址+1 =CFFFFH-A0000H+1 =CFFFFH+1-A0000H =D0000H-A0000H=30000H=3✖️16⁴=3✖️(2⁴)⁴=3✖️2¹⁶=3✖(2⁶✖2¹⁰)

1B=1024KB

总容量=存储单元个数✖️编码内容(按字节编码)= 3✖(2⁶✖2¹⁰)✖️1B = 3✖️(2⁶*2¹⁰)/2¹⁰KB = 3✖️2⁶ = 192KB

总片数=总容量/单位芯片容量=192KB/(64K✖️8bit)=3

2. 页式存储地址转换

3. 位示图