燕十八

关于进制介绍

1.     李开复在一个节目中出的题

某珠宝商,有31颗明月珍珠,此商人呢,把珍珠分成了若干盒,每盒的珠子数量都不一样
分完后,发现特别的巧,你想买1-31颗之间的珠子,此商人,都能正好取出其中的若干盒,正好能组成你想要的
买的珠子数量。分成了几盒?每盒又各是多少颗珠子呢?

分析:
计算机中,有一门很重要的课,叫信息论
一种东西,他的状态,能用来标识信息
比如:一只眼睛,能闭,能睁
想用来表示心情,最多能表示几种?
答:2种,因为眼睛只有2种,“态位”

如果有2只眼睛,每只眼睛都能睁,能闭
组合起来,就能表示4种心情

比如:
左开右开
左开右闭
左闭右开
左闭右闭

正好取出其中若干盒
那么每盒有几种状态?
答:2种,要么取,要么不取。
一个盒,就能表示两种‘态位’;
不妨标记为取1,不取0,又能组成1-31之间
连续的数字,因此,只能按2二进制
[1/0][1/0][1/0][1/0][1/0]

如用二进制的知识来分析

左数第一盒,权值 1
左数第二盒 ,权值2
左数第三盒 ,权值4
左数第四盒,权值 8
左数第五盒 ,权值16
17 = 10001 ,取第5盒+第1盒
29 = 11101 ,取5,4,3,1
22 = 10110,  取5,3,2

2.    8瓶水,1瓶有毒,死小老鼠,需要2小时时间,只给你2小时间,问:最少,需要几只老鼠?

  答:分析:毒死需要2个小间,只给2个小时,---->只能试一次
2小时后,小白鼠,只有2种状态:死、活
2只小白鼠,则有4种组合的状态
N只小白鼠,则有2^N次组合的状态
一共只有8瓶药水,最多需要8种状态,就能区分。
3只老鼠,组合8种状态

因此,从理论上说,3只老鼠足够了。
但3只老鼠如何试出来,自己用二进制的知识一组合一下。
活用1,死用0
[1/0][1/0][1/0]
000 ------1
001 ------2
010 ------3
011 ------4
100 ------5
101 ------6
110 ------7
111 ------8

3.  有个商人不小心把40磅的砝码摔碎了,摔成了4块,欲哭无泪时发现这4块砝码恰好可以组合成1-40的任意重量,求这4块碎砝码的质量?提示:组合就不是单纯相加,因为天平,你懂的?如:2=3-1

答: N块砝码, 一个天平
某一砝码可以放在左边,也可以放右边,也可以不放。
一个砝码,表示 3种态位
可标识: 0 1 2
[0/1/2][0/1/2][0/1/2][0/1/2]
想表示出连续的数字来,
然后,每个位上的权值,也要符合3进制的规律
权值: 1,3,9,27
1---->1
2---->3-1
3---->3
5---->9-1-3
6---->9-3
7---->9-3+1
8---->9-1
9---->9
10--->9+1
11--->9-1+3
12--->9+3
13--->9+1+3


4.   日常生活  数数
1 2 3 5 6 7 8
10
[左数第2位的一,代表10个]  30
[左数第2位,1值代表10]
1---->1
10--->1代表10
100-->1代表100
用术语来说:在不同的位置上,发挥的“重量”,叫"权值"

以10进制为例
1234 = 1000 +200 +30 +4

因为
从右往左数第四位的1 ,权值是1000,即以1顶1000,基数又是1,因此顶1000
从右往左数第三位的2 ,权值是100, 即以1顶100, 基数又是2,因此顶200
从右往左数第二位的3 ,权值是10,  即以1顶10,  基数又是3,因此顶30
从右往左数第一位的4 ,权值是1,   即以1顶1,   基数又是4,因此顶4

继续归纳:
从右往左数第1位,权植是1,10^0,10的0次方
从右往左数第2位,权植是10,10^1,10的1次方
从右往左数第3位,权植是100,10^2,10的2次方
从右往左数第4位,权植是1000,10^3,10的3次方

那么同学回答:
(abcdef)10  ,即10进制的abcedf的值是多少?
f*10^0 + e*10^1 + d*10^2 + c*10^3 +b*10^4 +a*10^5

归纳:在10进制中,基数 0 1 2 3 4 5 6 7 8 9

在10进制中,基数最大是9,因为到10,就把基数1进到第2位,来表示了。
扩展:在M进制中,基数的最大值是M-1

来个8进制练练
(abcd)8,即8进制的(1234)8值是多少?
往左数第1位,权值是8^1,基数*权值= 4 * 8^0
往左数第2位,权值是8^2,基数*权值= 3 * 8^1
往左数第3位,权值是8^3,基数*权值= 2 * 8^2
往左数第4位,权值是8^4,基数*权值= 1 * 8^3

计算出来,对应10进制是:
4*1 + 3*8 + 2*64 + 1+512 =668;

 

 代码展示如下:

 1 echo 1234,'<br />';
 2 echo 01234,'<br />';
 3 ////
 4 //在下面的列子中
 5 //前面加0代表8进制
 6 //
 7 //而8进制中,基数最大为7
 8 //现在出了一个9,自然就是‘违法的’
 9 //碰到 这种情况,php就会从9开始,把后面的值舍弃。
10 //
11 //echo 02399999,'<br />';
12 //看一看16进制
13 //碰到16才进位,0-15都是单个的基数来表示
14 //
15 //0----------------------------15
16 //0 1 2 3 4 5 6 7 8 9 a,b,c,d,e,f 
17 //
18 //(ab)16
19 //往左数第1位,权值是16^0,基数是b,值是b*16^0
20 //往左数第2位,权值是16^1,基数是a,值是a*16^1
21 
22 //因此 == b * 16^0 +a*16^1
23 //(24)16 = 4*16^0 + 2*16^1=36
24 
25 
26 //如何告诉计算机这是16进制呢?
27 //在前面加0x 
28 $age = 0x1c;
29 echo $age;

32 //程序员的冷笑话 33 //程序员分不清,圣诞节,和万圣节 34 // 35 //圣诞节: 12月25日 36 //万圣夜: 10月31日 37 38 //在英语里,常常这么缩写进制 39 40 //binary : 二进制 10010100B 41 //decimal:十进制 148D 42 //octconary: 八进制 224O 43 //hexadecimal: 十六进制 94H 44 // 45 //在程序员眼里 46 //dec25 --->10进制25 47 //oct31 --->8进制31 48 // 49 //(25)10 = (31)8 50 51 //二进制 ,自然基数只能是1,0两个 52 // 53 //1101 ===> 54 //从左到右 代表 55 //1*2^0 + 0*2^1 + 1*2^2 + 1*2^3 = 1+0+4+8=13 56 //如何在php中表示二进制 57 //在php5.4中,已经开始引进二进制的直接表示 58 echo PHP_VERSION; 显示php的版本

相关视频连接如下:

燕十八-PHP公益培训-YY直播-018-进制详解



 

posted @ 2013-02-11 08:26  启红  阅读(627)  评论(0编辑  收藏  举报