Embarcadero加油

呵呵呵。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

进制

十六进制的转换

进制也就是进位制,是人们规定的一种进位方法。 对于任何一种进制---X进制,就表示某一位置上的数运算时是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一

数制的概念(number systems)
  数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制和十六进制。
  数制也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。计算机是信息处理的工具,任何信息必须转换成二进制形式数据后才能由计算机进行处理,存储和传输。

十进制数(Decimal)
  人们通常使用的是十进制。它的特点有两个:有0,1,2….9十个基本数字组成,十进制数运算是按“逢十进一”的规则进行的.
  在计算机中,除了十进制数外,经常使用的数制还有二进制数和十六进制数.在运算中它们分别遵循的是逢二进一和逢十六进一的法则.

二进制数(Binary)
  二进制数有两个特点:它由两个基本数字0,1组成,二进制数运算规律是逢二进一。
  为区别于其它进制数,二进制数的书写通常在数的右下方注上基数2,或加后面加B表示。
  例如:二进制数10110011可以写成(10110011)2,或写成10110011B,对于十进制数可以不加注.计算机中的数据均采用二进制数表示,这是因为二进制数具有以下特点:
  1) 二进制数中只有两个字符0和1,表示具有两个不同稳定状态的元器件。例如,电路中有,无电流,有电流用1表示,无电流用0表示。类似的还比如电路中电压的高,低,晶体管的导通和截止等。
  2) 二进制数运算简单,大大简化了计算中运算部件的结构。
  二进制数的加法和乘法运算如下:
  0+0=0 0+1=1+0=1 1+1=10
  0×0=0 0×1=0 1×0=0 1×1=1

七进制数(septenary)
  七进制是以7为底数的记数系统。使用数字0-6。
  七进制小数通常都是循环小数,除非分母是七的倍数。有些小数可以用有限个数字来表示,如:
  十进制 七进制 (循环部分)
1/2 1/2 = 0.3...
1/3 1/3 = 0.2...
1/4 1/4 = 0.15...
1/5 1/5 = 0.1254...
1/6 1/6 = 0.1...
1/7 1/10 = 0.1
1/8 1/11 = 0.06...
1/9 1/12 = 0.053...
1/10 1/13 = 0.0462...
1/12 1/15 = 0.04...
1/14 1/20 = 0.03...
1/15 1/21 = 0.0316...
1/16 1/22 = 0.03...
1/18 1/24 = 0.025...
1/19 1/25 = 0.024...
1/20 1/26 = 0.0231...
1/21 1/30 = 0.02...
1/24 1/33 = 0.02...
... ...
1/49 1/100 = 0.01

七进制的乘法表:
  - 1 2 3 4 5 6 10
1 1 2 3 4 5 6 10
2 2 4 6 11 13 15 20
3 3 6 12 15 21 24 30
4 4 11 15 22 26 33 40
5 5 13 21 26 34 42 50
6 6 15 24 33 42 51 60
10 10 20 30 40 50 60 100

在七进制中: π = 3.0663651432... e = 2.5012410654...
  加法运算举例:1、131+245=4062、406+666=14053、1405+3456=4534数制转换举例:1、十进制的131转化成七进制数131(十)=18*7+5=(2*7+4)*7+5=2*7^2+4*7^1+5=245(七)2、七进制数245转化成十进制数245(七)=2*7^2+4*7^1+5=2*49+4*7+5=98+28+5=131(十)
  七进制的一个好处是,3.1 (22/7)是圆周率的一个很好的近似值。
  ————————————————————————
  Function Cvn10to7(num As Long) As LongDim rst As VariantDo While Int(num / 7) <> 0 rst = (num Mod 7) & rst num = (num - (num Mod 7)) / 7LoopCvn10to7 = num & rstEnd Function

八进制数(Octal)
  由于二进制数据的基R较小,所以二进制数据的书写和阅读不方便,为此,在小型机中引入了八进制。八进制的基R=8=2^3,有数码0、1、2、3、4、5、6、7,并且每个数码正好对应三位二进制数,所以八进制能很好地反映二进制。八进制用下标8或数据后面加O表示 例如:二进制数据 ( 11 101 010 . 010 110 100 )2 对应 八进制数据 ( 3 5 2 . 2 6 4 )8或352.264O.

duodecimal 十二进制
  十二进制 长度单位一英尺等于12英寸,一先令等于12便士,就连足球比赛罚点球的英制长度也是12码。
  十二进制来源:传说是十个手指头加两只脚。这是过去规定的,现在规定一打dozen为10个。
  规定一打12个是一种12进制。
  瑞典历史上有一位有远见的国王就说过,从日常应用的角度看,十二进制比十进制更方便。他生前曾设想过,在他管辖的范围内取消十进制,而代之以十二进制。
  现在还能见到十二进制,比如钟表转一圈12小时等等。
  十进制 1 2 3 4 5 6 7 8 9 10 11
十二进制 1 2 3 4 5 6 7 8 9 M N

有时十进制中的10/11在十二进制中也用A/B表示。

十六进制数(Hex)
  由于二进制数在使用中位数太长,不容易记忆,所以又提出了十六进制数
  十六进制数有两个基本特点:它由十六个字符0~9以及A,B,C,D,E,F组成(它们分别表示十进制数10~15),十六进制数运算规律是逢十六进一,即基R=16=2^4,通常在表示时用尾部标志H或下标16以示区别。
  例如:十六进制数4AC8可写成(4AC8)16,或写成4AC8H。

六十进位制数 sexagesimal
  古代人由于生产劳动的需要,要研究天文和历法,就牵涉到时间和角度了。因为历法需要的精确度较高,时间的单位小时,角度的单位度都嫌太大。必须进一步研究他们的小数。它们的小数都具有这样的性质︰使1/2,1/3,1/4,1/5,1/6等都能成为他的整数倍。以1/60作为单位,就正好具有这个性质。譬如︰1/2等于30个1/60,1/3等于20个1/60,1/4等于15个1/60…这种小数的进位制在表示有些数时很方便。例如常遇到的1/3,在十进位制中要变成无限小数,但在这种进位制中就是一个整数。

数的位权概念
  对于形式化的进制表示,我们可以从0开始,对数字的各个数位进行编号,即个位起往左依次为编号0,1,2,……;对称的,从小数点后的数位则是-1,-2,……
  进行进制转换时,我们不妨设源进制(转换前所用进制)的基为R1,目标进制(转换后所用进制)的基为R2,原数值的表示按数位为AnA(n-1)……A2A1A0.A-1A-2……,R1在R2中的表示为R,则有(AnA(n-1)……A2A1A0.A-1A-2……)R1=(An*R^n+A(n-1)*R^(n-1)+……+A2*R^2+A1*R^1+A0*R^0+A-1*R^(-1)+A-2*R^(-2))R2
  (由于此处不可选择字体,说明如下:An,A2,A-1等符号中,n,2,-1等均应改为下标,而上标的幂次均用^作为前缀)
  举例:
  一个十进制数110,其中百位上的1表示1个10^2,既100,十位的1表示1个10^1,即10,个位的0表示0个100,即0。
  一个二进制数110,其中高位的1表示1个2^2,即4,低位的1表示1个2^1,即2,最低位的0表示0个2^0,即0。
  一个十六进制数110,其中高位的1表示1个16^2,即256,低位的1表示1个16^1,即16,最低位的0表示0个16^0,即0。
  可见,在数制中,各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关,我们称这关系为数的位权。
  十进制数的位权是以10为底的幂,二进制数的位权是以2为底的幂,十六进制数的位权是以16为底的幂。数位由高向低,以降幂的方式排列。

进数制之间的转换
  1.二进制数、十六进制数转换为十进制数(按权求和)
  二进制数、十六进制数转换为十进制数的规律是相同的。把二进制数(或十六进制数)按位权形式展开多项式和的形式,求其最后的和,就是其对应的十进制数——简称“按权求和”.
  例如:把(1001.01)2 二进制计算。
  解:(1001.01)2
  =8*1+4*0+2*0+1*1+0*(1/2)+1*(1/4)
  =8+0+0+1+0+0.25
  =9.25
  把(38A.11)16转换为十进制数
  解:(38A.11)16
  =3×16的2次方+8×16的1次方+10×16的0次方+1×16的-1次方+1×16的-2次方
  =768+128+10+0.0625+0.0039
  =906.0664
  2.十进制数转换为二进制数,十六进制数(除2/16取余法)
  整数转换.一个十进制整数转换为二进制整数通常采用除二取余法,即用2连续除十进制数,直到商为0,逆序排列余数即可得到――简称除二取余法.
  例:将25转换为二进制数
  解:25÷2=12 余数1
  12÷2=6 余数0
  6÷2=3 余数0
  3÷2=1 余数1
  1÷2=0 余数1
  所以25=(11001)2
  同理,把十进制数转换为十六进制数时,将基数2转换成16就可以了.
  例:将25转换为十六进制数
  解:25÷16=1 余数9
  1÷16=0 余数1
  所以25=(19)16
  3.二进制数与十六进制数之间的转换
  由于4位二进制数恰好有16个组合状态,即1位十六进制数与4位二进制数是一一对应的.所以,十六进制数与二进制数的转换是十分简单的.
  (1)十六进制数转换成二进制数,只要将每一位十六进制数用对应的4位二进制数替代即可――简称位分四位.
  例:将(4AF8B)16转换为二进制数.
  解: 4 A F 8 B
  0100 1010 1111 1000 1011
  所以(4AF8B)16=(1001010111110001011)2
  (2)二进制数转换为十六进制数,分别向左,向右每四位一组,依次写出每组4位二进制数所对应的十六进制数――简称四位合一位.
  例:将二进制数(000111010110)2转换为十六进制数.
  解: 0001 1101 0110
  1 D 6
  所以(111010110)2=(1D6)16
  转换时注意最后一组不足4位时必须加0补齐4位

数制转换的一般化
  1)R进制转换成十进制
  任意R进制数据按权展开、相加即可得十进制数据。 例如:N = 1101.0101B = 1*2^3+1*2^2+0*21+1*2^0+0*2^-1+1*2^-2+0*2^-3+1*2^-4 = 8+4+0+1+0+0.25+0+0.0625 = 13.3125
  N = 5A.8H = 5*16^1+A*16^0+8*16^-1 = 80+10+0.5 = 90.5
  2)十进制转换R 进制
  十进制数转换成R 进制数,须将整数部分和小数部分分别转换.
  1.整数转换----除R 取余法 规则:(1)用R 去除给出的十进制数的整数部分,取其余数作为转换后的R 进制数据的整数部分最低位数字; (2)再用R去除所得的商,取其余数作为转换后的R 进制数据的高一位数字; (3)重复执行(2)操作,一直到商为0结束。 例如: 115 转换成 Binary数据和Hexadecimal数据 (图2-4) 所以 115 = 1110011 B = 73 H
  2.小数转换-----乘R 取整法 规则:(1)用R 去乘给出的十进制数的小数部分,取乘积的整数部分作为转换后R 进制小数点后第一位数字; (2)再用R 去乘上一步乘积的小数部分,然后取新乘积的整数部分作为转换后R 进制小数的低一位数字; (3)重复(2)操作,一直到乘积为0,或已得到要求精度数位为止。
编辑本段
进制的and、or、xor运算
  所有进制的and(和)、or(或)、xor(异或)运算都要转化为二进制进行运算,然后对齐位数,进行运算,具体的运算方法和普通的and、or、xor相同,如:1and1=1,1and0=0,0and0=0,1or1=1,1or0=1,0or0=0,1xor1=1,1xor0=0,0xor0=1。就是一般的二进制运算。
  如:35(H)and5(O)=110101(B)and101(B)=101(B)=5(O)

 

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

 

比如我们最常用的10进制,其实起源于人有10个指头。如果我们的祖先始终没有摆脱手脚不分的境况,我想我们现在一定是在使用20进制。

至于二进制……没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双袜子。

生活中还有:七进制,比如星期。十六进制,比如小时或“一打”,六十进制,比如分钟或角度……

了解一些进制知识!
一)、数制
计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备等优点,为了便于描述,又常用八、十六进制作为二进制的缩写。

一般计数都采用进位计数,其特点是:
(1)逢N进一,N是每种进位计数制表示一位数所需要的符号数目为基数。
(2)采用位置表示法,处在不同位置的数字所代表的值不同,而在固定位置上单位数字表示的值是确定的,这个固定位上的值称为权。
在计算机中:D7 D6 D5 D4 D3 D2 D1 D0 只有两种0和1
8 4 2 1

二)、数制转换
不同进位计数制之间的转换原则:不同进位计数制之间的转换是根据两个有理数如相等,则两数的整数和分数部分一定分别相等的原则进行的。也就是说,若转换前两数相等,转换后仍必须相等。
有四进制
十进制:有10个基数:0 ~~ 9 ,逢十进一
二进制:有2 个基数:0 ~~ 1 ,逢二进一
八进制:有8个基数:0 ~~ 7 ,逢八进一
十六进制:有16个基数:0 ~~ 9,A,B,C,D,E,F (A=10,B=11,C=12,D=13,E=14,F=15) ,逢十六进一

1、数的进位记数法
N=a n-1*p n-1+a n-2*p n-2+…+a2*p2+a1*p1+a0*p0
2、十进制数与P进制数之间的转换
①十进制转换成二进制:十进制整数转换成二进制整数通常采用除2取余法,小数部分乘2取整法。例如,将(30)10转换成二进制数。
将(30)10转换成二进制数
2| 30 ….0 ----最右位
2 15 ….1
2 7 ….1
2 3 ….1
1 ….1 ----最左位
∴ (30)10=(11110)2
将(30)10转换成八、十六进制数
8| 30 ……6 ------最右位
3 ------最左位
∴ (30)10 =(36)8

16| 30 …14(E)----最右位
1 ----最左位
∴ (30)10 =(1E)16
3、将P进制数转换为十进制数
把一个二进制转换成十进制采用方法:把这个二进制的最后一位乘上20,倒数第二位乘上21,……,一直到最高位乘上2n,然后将各项乘积相加的结果就它的十进制表达式。
把二进制11110转换为十进制
(11110)2=1*24+1*23+1*22+1*21+0*20=
=16+8+4+2+0
=(30)10

把一个八进制转换成十进制采用方法:把这个八进制的最后一位乘上80,倒数第二位乘上81,……,一直到最高位乘上8n,然后将各项乘积相加的结果就它的十进制表达式。
把八进制36转换为十进制
(36)8=3*81+6*80=24+6=(30)10
把一个十六进制转换成十进制采用方法:把这个十六进制的最后一位乘上160,倒数第二位乘上161,……,一直到最高位乘上16n,然后将各项乘积相加的结果就它的十进制表达式。
把十六制1E转换为十进制
(1E)16=1*161+14*160=16+14=(30)10
3、二进制转换成八进制数
(1)二进制数转换成八进制数:对于整数,从低位到高位将二进制数的每三位分为一组,若不够三位时,在高位左面添0,补足三位,然后将每三位二进制数用一位八进制数替换,小数部分从小数点开始,自左向右每三位一组进行转换即可完成。例如:
将二进制数1101001转换成八进制数,则
(001 101 001)2
| | |
( 1 5 1)8
( 1101001)2=(151)8

(2)八进制数转换成二进制数:只要将每位八进制数用三位二进制数替换,即可完成转换,例如,把八进制数(643.503)8,转换成二进制数,则
(6 4 3 . 5 0 3)8
| | | | | |
(110 100 011 . 101 000 011)2
(643.503)8=(110100011.101000011)2
4、二进制与十六进制之间的转换
(1)二进制数转换成十六进制数:由于2的4次方=16,所以依照二进制与八进制的转换方法,将二进制数的每四位用一个十六进制数码来表示,整数部分以小数点为界点从右往左每四位一组转换,小数部分从小数点开始自左向右每四位一组进行转换。
(2)十六进制转换成二进制数
如将十六进制数转换成二进制数,只要将每一位十六进制数用四位相应的二进制数表示,即可完成转换。
例如:将(163.5B)16转换成二进制数,则
( 1 6 3 . 5 B )16
| | | | |
(0001 0110 0011. 0101 1011 )2
(163.5B)16=(101100011.01011011)2 

posted on 2011-12-01 10:48  评评  阅读(1018)  评论(0编辑  收藏  举报