按位计数法
十进制计数法是世界各国常用的一种记数方法。也是我们从小学就开始学习的计数法。特点是相邻两个单位之间的进率都是十。10个较低的单位等于1个相邻的较高单位。常说“满十进一”,这种以“十”为基数的进位制,叫做十进制。
除了十进制你还知道其他的进制计数法吗?有点电脑基础的还能说出个二进制,再要说出更多来估计就要挠破头皮了。其实结合下我们的生活你会发现很多进制计数法我们平常都一直在使用,却不自知。
一打啤酒是12瓶,每12瓶就是一打,这个就叫做十二进制
“半斤八两”一词是个常用成语,很多人却忘了我们中国所用的称重单位斤和两,一斤=16两,每满16两是一斤,这就叫做十六进制。
用心观察下我们生活,你会发现“数学知识来源于生活实际”
对于程序员来说在学习了 10进制和 2进制两种计数法,这些方法一般称作按位计数法。除了 10进制和 2进制以外,还有许多种类的按位计数法。在编程中,也常常使用 8进制和 16进制计数法。
编程中常见的计数法
●8进制计数法
8进制计数法的特征如下:
使用的数字有0、1、2、3、4、5、6、7共 8种。
80的位、81的位、82的位、83的位……(基数是8)
●16进制计数法
16进制计数法的特征如下:
使用的数字有0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共 16种。
160的位、161的位、162的位、163的位……(基数是16)
在 16进制计数法中,使用 A、B、C、D、E、F(有时也使用小写字母 a、b、c、d、e、
f)来表示 10以上的数字。
● N进制计数法
一般来说, N进制计数法的特征如下:
使用的数字有0,1,2,3,…, N-1,共 N种。
N 0的位、N 1的位、N 2的位、N 3的位……(基数是 N)
例如, N进制计数法中, 4位数 a3a2a1a0为
a3× N3+ a2× N2+ a1× N1+ a0× N0(a3、a2、a1、a0是0~N-1中的数字。)
一、常见进制数之间的算关系表:
二进制 | 八进制 | 十进制 | 十六进制 |
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
10 | 2 | 2 | 2 |
11 | 3 | 3 | 3 |
100 | 4 | 4 | 4 |
101 | 5 | 5 | 5 |
110 | 6 | 6 | 6 |
111 | 7 | 7 | 7 |
1000 | 10 | 8 | 8 |
1001 | 11 | 9 | 9 |
1010 | 12 | 10 | A |
1011 | 13 | 11 | B |
1100 | 14 | 12 | C |
1101 | 15 | 13 | D |
1110 | 16 | 14 | E |
1111 | 17 | 15 | F |
二、 二进制换算成八进制和十六进制的方法
如二进制的“10110111011”:
换八进制时,从右到左,三位一组,不够补0,即成了:
010 110 111 011
然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加【备注】,如:
010 = 2
110 = 4+2 = 6
111 = 4+2+1 = 7
011 = 2+1 = 3
结果为:2673
而换十六进制时其实也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为:
0101 1011 1011
运算为:
0101 = 4+1 = 5
1011 = 8+2+1 = 11(由于10为A,所以11即B)
1011 = 8+2+1 = 11(由于10为A,所以11即B)
结果为:5BB
注意,二进制数转化为八进制数、十六进制数时,对于分组,整数部分是从右向左分组,不够在左边补0,而小数部分则是从左向右分组,不够在右边补0,
如二进制小数:
0.1100111
转化为八进制数,应分组为:0.110 011 100 ,转化后为0.634
转化为十六进制数,应分组为:0.1100 1110,转化后为0.CE
三、 二 八 十六进制换算成十进制
3.1 二进制数转换为十进制数
二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……
所以,设有一个二进制数:0110 0100,转换为10进制为:
下 面是竖式:
0110 0100 换算成 十进制
第0位 0*20 = 0
第1位 0*21 = 0
第2位 1*22 = 4
第3位 0*23 = 0
第4位 0*24 = 0
第5位 1*25 = 32
第6位 1*26 = 64
第7位 0*27 = 0 +
---------------------------
100
用横式计算为:
0*20 + 0*21 + 1*22 + 1*23 + 0*24 + 1*25 + 1*26 + 0*27 = 100
3.2 八进制数转换为十进制数
八进制就是逢8进1。
八进制数采用 0~7这八数来表达一个数。
八进制数第0位的权值为8的0次方,第1位权值为8的 1次方,第2位权值为8的2次方……
所以,设有一个八进制数:1507,转换为十进制为:
用竖式表示:
1507 换算成十进制。
第0位 7*80 = 7
第1位 0*81 = 0
第2位 5*82 = 320
第 3位 1*83 = 512 +
--------------------------
839
3.3 十六进制数转换成十进制数
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示 10,11,12,13,14,15。字母不区分大小写。
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的 权值为16的2次方……
所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X 16的N次方。
假设有一个十六进数 2AF5, 那么如何换算成10进制呢?
用竖式计算:
2AF5 换算成10进制:
第0位: 5*160 = 5
第1位: F*161 = 240
第2位: A*162 = 2560
第3位: 2*163 = 8192 +
-------------------------------------
10997
(别 忘了,在上面的计算中,A表示10,而F表示15)
四、十进制换算成二 、八、十六进制
以十进制的数除以所要转换的进制数,把每次除得的余数记在旁边,所得的商数继续除以进制数,直到余数为0时止.例如要把100转换成八进制:
100/8=12...(余数为4);
12/8=1.....(余数为4);
1/8=0......(余数为1);
然后把相应的余数从低向高顺着写出来,如上的为144,此即为100的八进制表示形式.
十进制转换为十六进制与二进制与前面的转化为八进制相同,如100转换为十六进制:
100/16=6....(余数为4);
6/16=0......(余数为6);
则以十六进制表示的100形式为64;
十进制转换为二进制: 整数部分按除2取余,小数部分按乘2取整
例:
50/2 ........ 余0
25/2 ........ 余1
12/2 ........ 余0
6/2 ........ 余0
3/2 ........ 余1
1
50的二进制就是 110010
小 数
0.25*2 ........ 0.5 整数 0
0.5*2 ........ 1.0 整数 1
0.25 的二进制数就是 0.01
五、二、十六进制数互相转换
二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。
如(上行为二制数,下面为对应的十六进制):
1111 1101 , 1010 0101 , 1001 1011
F D , A 5 , 9 B
反过来,当我们看到 F D时,如何迅速将它转换为二进制数呢?
先转换F:
看到F,我们需知道它是15(可能你还不熟悉 A~F这五个数),然后15如何用8421凑呢?应该是8 + 4 + 2 + 1,所以四位全为1 :1111。
接着转换 D:
看 到D,知道它是13,13如何用8421凑呢?应该是:8 + 2 + 1,即:1011。
所以,FD转换为二进制数,为: 1111 1011