1248转换法:快捷心转二进制
某日,小坤坤顶着狂风暴雨出门面试,坐了地铁,转了共享单车,摔了一跤,走过马路,跨过人行天桥,一路又唱又跳终于到达面试地点,见到了面试官:
面试官:“1的二进制是多少?”
小坤坤:“01”
面试官:“2呢?”
小坤坤:“10”(坤:So easy)
面试官:“13的二进制是多少?”
小坤坤:“这个需要算一下,平时不用” 说完掏出纸笔进行除二法运算
小坤坤顶着面试官灼热的目光一通写画后:“是1101”
面试官:“那15呢?”
小坤坤又一通写画道:“是1111”
面试官诧异:“就这还要笔算?合着你只背了10以内的二进制转换是吧?”
小坤坤顿时无言,羞愧离去
我们熟知的十进制转二进制的方法为除二法,需要列式计算,极为不便。这里介绍一种便于心算的方法,让面试官问到你不用再掏出草稿纸来列式计算。
二进制转十进制
先来点开胃小菜:
- 110
- 111
- 1010
快速写出这三个数的十进制数字,不是死记硬背哦
十进制数字分别为6、7、10,怎么快捷算出来的呢,背后的指导理论是什么,观察下面的表格
8 | 4 | 2 | 1 |
---|---|---|---|
1 | 1 | 0 |
110,以0为假,1为真。为真的位的数字为4、2,加起来为6
,这就是110的十进制。
代入1010,根据1248理论画出表格模型:
8 | 4 | 2 | 1 |
---|---|---|---|
1 | 0 | 1 | 0 |
为真的位数字为8和2,加起来是10
。怎么样,根据1248转换法十进制转二进制是不是很简单,你可能会问,要是101010怎么办
依此类推1、2、4、8、16、32、64、128…,为2的幂次方递进,如下
32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|
1 | 0 | 1 | 0 | 1 | 0 |
为1的位的数字相加,即32 + 8 + 2 = 42,101010的十进制为42
。
十进制转二进制
计算下面三个数的二进制:
- 9
- 23
- 77
还是使用1248转换法的理论来进行操作,对数字9进行拆解 9 = 8 + 1
,列出1248表格
8 | 4 | 2 | 1 |
---|---|---|---|
1 | 0 | 0 | 1 |
则"8"位和"1"位为真,则为1,余者补位0,则最终得到1001
,这就是9的二进制。
对23拆解,23 = 16 + 7 = 16 + 4 + 2 + 1
,列出1248表格:
16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|
1 | 0 | 1 | 1 | 1 |
观察得知,23的二进制为10111
同理,77 = 64 + 13 = 64 + 8 + 4 + 1
,列出1248表格:
64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|
1 | 0 | 0 | 1 | 1 | 0 | 1 |
余位补0,观察可知77的二进制为1001101
.
我们以后遇到二进制和十进制互转的题目就不用怕了,也不用顶着面试官灼热的目光拿出草稿纸进行除二法慢慢推算(😇),只要根据1248转换理论心列表格就迎刃而解了。
十进制和十六进制互转
这里顺便提一下十进制转十六进制,方法其实也很简单,但是如果不主动去总结发现很容易就忽略了。
- 24
- 36
- 82
计算这三个数的16进制
24
=
16
∗
1
+
8
=
>
0
x
18
24 = 16 * 1+ 8 => 0x18
24=16∗1+8=>0x18
36 = 16 ∗ 2 + 4 = > 0 x 24 36 = 16 *2 + 4 => 0x24 36=16∗2+4=>0x24
82 = 16 ∗ 5 + 2 = > 0 x 52 82 = 16 * 5 + 2 => 0x52 82=16∗5+2=>0x52
观察可知,由16的倍数加上剩余的数字组成16进制数。
十六进制转十进制则为:
0
x
18
=
1
∗
1
6
1
+
8
∗
1
6
0
=
24
0x18 = 1 * 16^1 + 8 * 16^0 = 24
0x18=1∗161+8∗160=24
0 x 24 = 2 ∗ 1 6 1 + 4 ∗ 1 6 0 = 36 0x24 = 2 * 16^1 + 4 * 16^0 = 36 0x24=2∗161+4∗160=36
0 x 52 = 5 ∗ 1 6 1 + 2 ∗ 1 6 0 = 82 0x52 = 5*16^1 + 2 * 16^0 = 82 0x52=5∗161+2∗160=82
END