16进制加法 keil_课堂分享:二进制和其他进制. Binary and other Number systems

在刚开始这个话题的时候,为了吸引同学们的注意力(装b),我一般会在课堂上玩一下这个游戏:

338000774eb1e37ded9341e53d01d136.png
先把这几个表格投在白板上

先让一组同学商量出一个1到100的数,记在心里不要让我知道了。 接着我会从第一位同学开始,问他这个数在不在第一个表格里。 接着问第二名同学他们选的数在不在第二个表格里,接着第三个,第四个,直到第七个。

第一位:“不在”

第二位: “在”

第三位: “在”

第四位:“不在”

第五位:“在”

第六位:“不在”

第七位:“不在”

之后我闭上眼睛,头微微往上抬,假装努力回忆的样子,

“22。”

这七位同学都不说话,我再次问到:

“是不是22?”

“不是不是,老师你再猜猜。”

我心里一惊,难道又又又又翻车了?

赶紧拿出小铅笔在纸上悄悄算一算0010110....

“就是22,不要想骗我。”

“好吧好吧,是是是。” 似乎同学们对我的装b已经感到麻木,已经没有了学期刚开始时的那种崇拜之情。

哎,没办法,课还得继续上。没人捧场,我就只能自己捧场。

“那我是怎么知道的呢?”

“背下来的!”

!@(&#@!*$#@ 背个铲铲

“那我是怎么把这100个数在什么位置都记下来的?”

“老师这个表格里有一定的规律,但我现在还看不出来。”

好,终于等到这句话了,接下来就开始我们的二进制学习。

接着我放了一段生活大爆炸的节选片段,其中sheldon提到了Binary二进制这个词。 视频现在发不上来,以后补。

为什么我们从小学的数学都是基于10进制? 很有可能是因为人类有10根手指,数到第10个的时候就没办法继续了,只能进一位从1继续数。

如果恐龙统治了世界,很可能他们就用8进制了。

388550160fac32ca3216233244562297.png

进制到底是什么?

当我们看到一个数字的时候,我们是怎么知道它表示的是什么意思的?

比如237是怎么被理解的?

小学时我们知道从右边第一位叫个位数,第二位叫十位数,第三位叫百位数, 以此类推...

所以我们看到"237"这个数的时候,在脑子里我们做的思维是:

百位数是2,所以有2个百。

十位数是3,所以有3个十。

个位数是7,有7个一。

237=2×100+3×10+7×1。

同样的,千位数表达的是有几个1000,万位就是有几个10000,位数每往左边增加一位,表达的数量就会乘以10。 也可以理解为从右边开始第一位表达的是有几个10的0次方,第二位表达的是有几个10的1次方,第三位是有几个10的2次方...

237=2×10²+3×10^1+7×10^0

十进制到二进制转换 Binary Conversion

那如果有一种生物只有两根手指呢? 它们没办法数到10,数到2就得进位了,那他们的进制系统会是怎么样? 在二进制里,逢2就进1,所以每一位都不可能出现大于1的数。

比如

就是一个合法的二进制(右下角那个2表示这个数是2进制),那它表示的是什么意思?

理解方法和刚才的10进制例子是一样的,右边第一位是有多少个2的0次方,第二位是有多少个2的1次方,第三位是有多少2的2次方,第四位是有多少2的3次方,以此类推.

所以

=
=8+0+2+1=11

再来个难一点的例子:

48a3c21f6ef57ea3ee2db6038f3f2aa7.png

0*128+1*64+0*32+1*16+0*8+0*4+1*2+0*1=

所以

=

那如果我们想把十进制转换成二进制呢? 其实就是把刚才的过程给反过来。

比如我想把123从十进制转换成二进制。

我就要这样想:

123=64+32+16+8+0+2+1,也就是说在二进制里除了第二位,其他位数都是1. 所以:

二进制加法 Binary Addition

在十进制的加法里,逢十进一,在二进制里就是逢二进一。

比如11001011+11100110=110110001

e858021143cf2d837ff2194c04ac4609.png

其它进制 Other Base Systems

既然有2进制,就可以有3进制,4进制...甚至16进制等等。

对于n进制和十进制的转换,只需要遵守右边第一位代表有几个n的0次方,第二位代表有几个n的1次方,逻辑和二进制是一样的。

换算成10进制就是:

1×3²+2×3+0*1=

再把十进制里的100换算成四进制:

先把四进制每一位表示多少写出来:

64 16 4 1

从最高位开始数:我们需要1个64,2个16(不能是3个16,不然的话64+48已经超过100了),1个4。 所以十进制里的100写成四进制就是:

好了,在讲应用方法之前我们先做几个练习题:

http://1.In what base is this equation true?

在哪个进制里以下等式成立?

11+1=100

答案:2。 在个位数上两个1加到一起变成了0,说明这个进制里是逢2进1的,也就是2进制。

2. In what base is this equation true?

在哪个进制里以下等式成立?

66+66=143

答案:9. 在十进制里个位数两个6加到一起应该变成2,但是这里变成了3,说明是逢9进1的,那也就是9进制。我们再验算一下:个位数两个6加在一起,逢9进1,那么还剩下一个3,并且往前进了一位。 第二位:6+6+1逢九进1,还剩4并且往前进一位。 最后得出143。

3.What number follows 666 is base 7?

在7进制中,666往后一个数是多少?

7进制逢7进1,所以

c202628e3bff10d2c96b643667bc82be.png

我们发现了一个新的质数,它可以被表示成2^74207281-1,请问把它换算成2进制以后每一位加起来的和是多少?

在之前的例子里我们可能已经发现了,每个数在不同的进制里表达出的复杂度是不一样的,比如刚刚我们想把100这个整百数转换成4进制就变成1210了。 为什么会这样? 因为100是10平方,但并不是4的任何整数次方,所以说用十进制表达100就很方便,但是用别的进制就需要额外做一些加法才行。

同样的,在这个问题里,既然这个数可以被表达成2的整数次方-1,那用二进制表达起来肯定就会很简单。 我们想一下:

8在2进制里怎么表达?

8=2³=

也就是说我们只需要一个2的三次方就能完整表达了,其他位数都填0.

那么2^74207281次方在二进制里就应该是10000000000...00000000000000(74207281个0), 如果再减掉1的话,就要从最左边的1借位,所以最左边的1没了,然后所有的0变成1,最终等于11111111111...111111111(74207281个1),把这些1全部加起来的话就等于74207281.

巧妙地应用进制的整数次方再做加减法,可以更快速地进行进制转换,比如:

转换成二进制:

我们知道2的9次方是512,也就是说

, 减掉1的话,

就变成了111111111.

转换成4进制:

其他进制的应用

进制的基础知识讲完了,我们现在来回头看看一开始的“读心术”到底是怎么回事。

a3fc63c7a8afdd4e13c7eb214f065d53.png

如果我们把1~100的所有整数都换算成二进制,也就是1,10,11,100,101,110,111,1000(1,2,3,4,5,6,7,8)..., 那么会发现我把所有最右边开始第一位是1的数都写在了第一张表格,把第二位有1的都写进了第二张表格,第三位有1的都写进了第三张表格...

当同学们告诉我他们想的数在第n张表格里时,我就知道这个数的二进制的第n位是1。 不在第m张表格时,我就知道这个数的二进制的第m为是0,剩下的就是把得到的二进制数换算回十进制。 比如一开始讲的:

第一位:“不在”

第二位: “在”

第三位: “在”

第四位:“不在”

第五位:“在”

第六位:“不在”

第七位:“不在”

我就可以写出0010110这个二进制数,换算成十进制就是22.

--------------------------------------------------------------------------

还有一个比较有名的二进制问题是这样的:

The King of a small country invites 1000 senators to his annual party. As a tradition, each senator brings the King a bottle of wine. Soon after, the Queen discovers that one of the senators is trying to assassinate the King by giving him a bottle of poisoned wine. Unfortunately, they do not know which senator, nor which bottle of wine is poisoned, and the poison is completely indiscernible. However, the King has 1000 prisoners he plans to execute. He decides to use some of them as taste testers to determine which bottle of wine contains the poison. The poison when taken has no effect on the prisoner until exactly 24 hours later when the infected prisoner suddenly dies. The King needs to determine which bottle of wine is poisoned by tomorrow so that the festivities can continue as planned. Hence he only has time for one round of testing. What is the minimum number of prisoners that he could test to ensure that 24 hours from now he is guaranteed to have found the poisoned wine bottle?

中文简化版:

有一个国王有一千桶酒,其中有一桶有毒,喝了毒酒的人在24小时之后会暴毙身亡。国王在第二天有一场宴会,所以他只有时间让囚犯们做一轮测试,请问最少需要多少个囚犯就可以确定出哪一桶酒有毒?

答案:10个囚犯就够了。

将1到1000桶酒全部按照二进制编号,第一桶酒是1,第二桶是10,第三桶11,第四桶100,第五桶101,以此类推... 由于2^10=1024, 1000桶酒只需要10位二进制就能全部表述。

同样的,我们将囚犯也编为一到十。 第一桶酒编号是1,所以第一位囚犯测试。 第二桶酒是10,那么第二位囚犯尝试。 第三桶酒是11,那就第一和第二号囚犯尝试。第四桶酒是100,那就第三号囚犯去尝试.. 这样一直到第1000桶酒。

在24小时之后,比如说一号,四号,五号囚犯挂了,我们就知道只有他们三个喝过的酒二进制编号为11001,换算成十进制是25,这样我们就知道第25桶酒有毒了!

-------------------------------------------------------------------------------------------

即将要举办的澳大利亚数学竞赛AMC2019的倒数第二题,看似很麻烦的问题,如果用转换进制的思维来做,也会变得异常简单。

699a88f5411cab1a61eb627bd995a435.png

这个问题如果靠分析和排除来做也是可以的,就是会非常耗费时间。

我看到这个问题的时候首先想到的就是进制转换。

这个国家里不能出现0,也就是说每一位数都只能从9个数里面选,既:

1,2,3,4,5,6,7,8,9

那在什么进制里每一位只能从9个数里选呢? 九进制啊!

为了方便让大家理解,我们把这个国家的计数数全体减一,可以得到:

A={

0,1,2,3,4,5,6,7,8,

10,11,12,13,14,15,16,17,18,

20,21,22.....

}

现在这个新的数集A成了真正的九进制计数数,加一个额外的0。

接下来这个问题就很简单了。

假如我们想知道二进制计数数的第七个是什么,很简单,先数数试试:

1, 10, 11 , 100, 101, 110, 111

二进制的计数数第七个是111。 也就是说我们把十进制语境里的七换算成二进制就好了啊!

回到刚才的问题来,我们想知道在九进制计数数里的第1000个数怎么写(这里的1000所在的语境是十进制)。那不就是把1000换算成九进制就好了嘛?

等一下,计数数是从1开始的,我们得到的这个A是从0开始的,所以A的第1000个数我们只需要把

换算成九进制就好了。

稍作计算

最后再把一开始减掉的一给加回去,得到 1331.

问题问的是最后三位是什么,那答案就是331。

在硬核数学题做完之后,我们还讲了二进制编码,莫斯电码等等。这些更多有趣的内容我后续再更新(主要是实在太搞笑了我想单独下一篇)。

最后以一段笑话来结束这篇文章:

There are only 10 types of people: those who know binary, and those who don’t.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值