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 凑位权法
十进制转二进制使用凑位权法
位号 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|
k | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
2ᴷ | 1024 | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
例如将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 十进制转二进制的规律
2. 二进制与十六进制
进制 | 数码 | 基数 | 位权 |
---|---|---|---|
十进制(D ) | 0,1,2,3,4,5,6,7,8,9 | 10 | 10ᴷ |
二进制(B ) | 0,1 | 2 | 2ᴷ |
十六进制(H ) | 0~9,A ,B,C,D,E,F | 16 | 16ᴷ |
在计算机进程中,主要是二进制
作为底层机制,但是在计算机发展历程中,由于二进制
位数过长,考虑把它压缩成十六进制
来进行存储,那么二进制
和十六进制
有什么互转关系呢?一个进制表示十六进制
最大的数码是15
,那这个15
转成二进制
是1111
,所以对于十六进制
用二进制
转换的时候,1位十六进制
最多需要4位二进制
来表示。
我们在进行转换的时候,可以采用分组法
将二进制的字符串分为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法
思考题
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
编码内容
- 按字编址:存储体的存储单元是字存储单元,即最小存址单位是一个字。
- 按字节编址:存储体的存储单元是字节存储单元,即最小存址单位是一个字节。(无特殊说明,默认按字节编址)
总容量=存储单元个数✖️编码内容
- 根据存储器所需容量和选定的存储芯片的容量,就可以计算出所需芯片的总数,即:总片数=总容量/每片的容量
按字节编址: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