一、基础
1、计算机系统及数字设备使用2进制
2、世界上除了十进制,还存在多种其它进制如8,16,60,1024
3、人工智能之父:图灵
4、N进制,就有N个数字
2 -> 0 1
8-> 0 1 2 3 4 5 6 7
10-> 0 1 2 3 4 5 6 7 8 9
16-> 0 1 2 3 4 5 6 7 8 9 A B C D E F (颜色) #ff0000
5、N进制,逢N进1
10+5=15
二、十进制转换成N进制
除N取余法
(35)10=(100011)2
(108)10=( )2
(256)10=(100000000)2
0->1 1
1->2 10
2->4 100
3->8 1000
1 -> 1
11 ->3
111 ->7
1111 ->15
11111->31
111111->63
##########################
(35)10=( 43 )8
(108)10=( 154 )8
(256)10=( )8
##########################
(35)10=( )16
(108)10=( )16
(256)10=( )16
##########################
三、N进制转换成十进制
按位权相加法
(100010)2=( )10
=1*2^5 + 1*2^1
=32+2
=34
(1111101)2=( )10
=2^6+2^5+2^4+2^3+2^2+2^0
=64+32+16+8+4+1
=20+40+65
=125
##########################
(147)8=( )10
=1*8^2+4*8^1+7*8^0
=64+32+7
=103
##########################
(1AC)16=( )10
=1*16^2+10*16+12
=256+160+12
=428
################
(177)8=( )2
(177)8=(X)10=( )2
通过十进制作为媒介
(256)10=(100000000)2=(400)8=(100)16
(ABC)16=()2=()8=(2748)10
(10101010)2=(170)10=(252)8=(AA)16
2^7+2^5+2^3+2^1
=128+32+8+2
=170
ABC
=10*16^2+11*16+12
=2560+176+12
=2560+188
=2748
有8桶酒,其中一桶有毒,5分钟毒性发作,请问用多少之小白鼠在5分钟时间测试出那一桶有毒。
四、二进制与八、十六进制间的快速转换
4.1、二进制与八进制之间的转换
1位8进制等于3位2进制
11010101=011,010,101=325
10111101010101=010,111,101,010,101=27525
(163)8=( )2
163=001,110,011=1110011
70013=111000000001011
4.1、二进制与八进制之间的转换
11010101=1101,0101=13,5=D5
10111101010101=0010,1111,0101,0101=2,15,5,5=2F55
FFF=1111 1111 1111
1C9C=1110010011100
五、小数与进制
5.1、十进制小数位转N进制小数
乘N取整
(179.48)10=整数部分263,小数部分365=(263.365)8
0.48*8=3.84=3 0.84
0.84*8=6.72=6 0.72
0.72*8=5.76=5 0.76
.
.
.
(35.35)10=(43.263)8=(100011.010110011)2
35.35=整数43,
0.35*8=2.8 2 0.8
0.8*8=6.4 6 0.4
0.4*8=3.2 3 0.2
0.35*2=0.7 0
0.7*2=1.4 1
0.4*2=0.8 0
0.8*2=1.6 1
0.6*2=1.2 1
0.2*2=0.4 0
0.4*2=0.8 0
0.8*2=1.6 1
0.6*2=1.2 1
0.2*2=0.4 0
小数位同样可以使用421,与8421的办法转换.
5.2、N进制小数位转十进制小数
按负位权相加
110.101=1*2^2+1*2^1=4+2=6
1*2^-1+1*2^-3=0.5+0.125=0.625
=6.625
11.0101=(3.3125)10
2^1+2^0=3
2^-2+2^-4=0.25+0.0625=0.3125
练习:
(73.99)10=(1001001.111111)2=(111.77)8=(49.FC)16
0.99*2=1.98 1
0.98*2=1.96 1
0.96*2=1.92 1
0.92*2=1.84 1
0.84*2=1.68 1
0.68*2=1.36 1
95.27=1011111.010001=001,011,111.010,001=137.21
0101,1111.0100,0100=5F.44
95=1011111
0.27=10001
=0.27*2=0.54 0
=0.54*2=1.08 1
=0.08*2=0.16 0
=0.16*2=0.32 0
=0.32*2=0.64 0
=0.64*2=1.28 1
-
5.3、进制取余数的代码
/取进制位上的数值
function getRemainder($num, $bin, $pos, &$result = 0){ //author lianq.net //$num 数值,十进制 //$bin 要转换的进制 //$pos 位数 $real_len = log($num, $bin);//对数,求原值长度 $floor_len = floor($real_len);//舍去求整 $base = pow($bin, $pos-1);//基数 $divisor = pow($bin,$pos);//除数 if($num >= $divisor){ $new_num = $num % pow($bin, $floor_len); getRemainder($new_num, $bin, $pos, $result); }else{ $result = floor($num / $base); } return $result; } //比如,数值16转换为9进制时,它的第一位上的数值是多少? $a = getRemainder(16,9, 1); echo $a;//输出7