十进制转二进制 / 八进制 / 十六进制的手算方法,及其数学原理的通俗解释
作者:互联网
二进制与十进制前言:接触计算机的同学学习基础课程时,不免会碰到十进制转二进制 / 八进制 / 十六进制这种问题。常见的方法有“除以2/8/16看余数”。本文在介绍方法的前提上,对其数学原理进行了通俗的解释。
不考虑汇编语言的特性,对于一个字节:1 0 0 1 1 0 1 0,将其转十进制即为
要注意最低位(最右边的位)代表的是2的0次方,而非1次方。总之,二进制转十进制很简单。这里为后文做铺垫。
十进制转二进制手算方法以154为例:将154不断除以2,取余数,最后从底部取数,作为二进制的开头。
操作 | 上一行操作的商值 | 余数 |
---|---|---|
154除以2 | 154 | 0 |
77除以2 | 77 | 1 |
38除以2 | 38 | 0 |
19除以2 | 19 | 1 |
9除以2 | 9 | 1 |
4除以2 | 4 | 0 |
2除以2 | 2 | 0 |
1除以2 | 1 | 1 |
最后所得二进制值即10011010。
结果是正确的,但是这个方法的道理/数学原理是什么?
数学原理十进制数154,对应的二进制为10011010,即,我们将这个式子进行与上述方法同样的操作。
操作 | 上一行操作的商值 | 余数 |
---|---|---|
154除以2 | 154 = 2^7 * 1 + 2^4 * 1 + 2^3 * 1 + 2^1 * 1 | 0 |
77除以2 | 77 = 2^6 * 1 + 2^3 * 1 + 2^2 * 1 + 2^0 * 1 | 1 |
38除以2 | 38 = 2^5 * 1 + 2^2 * 1 + 2^1 * 1 | 0 |
19除以2 | 19 = 2^4 * 1 + 2^1 * 1 + 2^0 * 1 | 1 |
9除以2 | 9 = 2^3 * 1 + 2^0 * 1 | 1 |
4除以2 | 4 = 2^2 * 1 | 0 |
2除以2 | 2 = 2^1 * 1 | 0 |
1除以2 | 1 = 2^0 * 1 | 1 |
如上表,不断除以2实际上是一种“将二进制高位降档”的过程:
- 对于最高位的2,比如10011010最左边的1,当然要除以7次2才能把低位的1和0“清理干净”;
- 实际上,还可把除以2理解为一种“吞掉低位数字”,即第一次除以2将10011010末尾的0吞掉,吐出1001101,以此类推;
- 不管怎么理解,都与定义规则规则息息相关。
【附】定义规则:对于位的二进制数,其转换为十进制即。
拓展:十进制转八进制、十六进制那现在读者也一定知道八进制转二进制的做法和原理了吧?我来举个例子,比如十进制数109。
操作 | 上一行操作的商值 | 余数 |
---|---|---|
109除以8 | 109 = 8^2 * 1 + 8^1 * 5 + 8^0 * 5 | 5 |
13除以8 | 13 = 8^1 * 1 + 8^0 *5 | 5 |
1除以8 | 1 = 8^0 * 1 | 1 |
即109的八进制为155。
转为十六进制例子如下。
操作 | 上一行操作的商值 | 余数 |
---|---|---|
109除以16 | 109 = 16^1 * 1 + 16^0 * 13 | D(13) |
6除以16 | 6 = 16^0 * 6 | 6 |
即109的十六进制为6D。
标签:十六进制,154,16,二进制,除以,109,手算,八进制,十进制 来源: https://blog.51cto.com/u_15279775/2937866