口算二进制相互转换十六进制 以及拓展

Why?

hhhhh,没想到吧,我也没想到这东西还需要口算。
国内一些考试需要,既然看了就记录下来吧。

用十六进制实战

首先咱先来看下,一位十六进制数转换的数值。

十六进制 二进制 十进制
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
A 1010 10
B 1011 11
C 1100 12
D 1101 13
E 1110 14
F 1111 15

其实也大可不必全背下来,8以下的我相信大家都记得差不多,
咱记住F就是1111,A是1010这两个锚点上下加减就够了。

二进制转十六进制

给出一个二进制数 101110101010110101

  • 从右到左,每4位一组将二进制进行分组 10 1110 1010 1011 0101, 为什么是4位一组,因为16等于2的4次方
  • 将每组按十六进制转换 2 e a b 5

    即 10 => 2, 1110 => e, 1010 => a, 1011 => b, 0101 => 5

  • 最后将每组的转换值合并就可以获得对应进制的值 0x2eab5

十六进制转二进制

其实是对二进制转十六进制的逆向

  • 给出一个十六进制数 0x2eab5
  • 为每位数展开为二进制数,这里需要注意,转为二进制后不足4位的要高位补0 0010 1110 1010 1011 0101

    即 2 => 0010, e => 1110, a => 1010, b=> 1011, 5 => 0101

  • 最后将每组的转换值合并就可以获得转换后的二进制数 101110101010110101

其实扩展一下理论我们就可以得到

二进制转2^n进制

给出一个二进制数101110101010110101

  • 从右到左,每n位一组将二进制分开
  • 将每组按2^n进制转换
  • 最后将每组的转换值合并就可以获得对应进制的值

2^n进制转二进制

其实是对二进制转2^n进制的逆向

  • 给出一个2^n进制数
  • 为每位数展开为二进制数,这里需要注意,转为二进制后不足n位的要高位补0
  • 最后将每组的转换值合并就可以获得转换后的二进制数

最后咱来看下题目哈

问: 内存按字节编址从A5000H到DCFFFH的区域其存储容量为__KB.

笔算说是。。。

1
2
3
4
5
6
7
x = 0xDCFFFF - 0xA5000 + 1  
= 0xDD0000 - 0xA5000
= 0x38000
= 0x0011 1000 * (2^12) // 后面3个0,转二进制就是 4*3 个 0
= 7 * (2^5) * (2^10) // 单位Bytes
= 7 * 32 // 单位 KB
= 224KB // 哒哒

口算二进制相互转换十六进制 以及拓展

https://nevermoreluo.github.io/2023/09/13/口算二进制转换/

Author

Nevermore

Posted on

2023-09-13

Updated on

2024-02-21

Licensed under