admin 管理员组

文章数量: 1184232


2024年12月22日发(作者:git fork clone 区别)

计算机中数制之间的转换

赵祖应

(云南爱因森软件职业学院,云南 昆明 65000)

摘要:

由于二进制具有电路简单,易于表示,可靠性高,运算简单,逻辑性强等特点,所

以在计算机中采用二进制来表示指令和存储数据,所以计算机只能识别二进制,由于人们所

固有的习惯,我们需要的数据和信息,要用计算机来处理,那么必须把它转换成二进制。

关键字:

数据单位;计数制与非计数制;进制的表示方法;数制之间的转换

一、数据的表示单位

我们要处理的信息在计算机中常常被称为数据。所谓的数据,是可以由人工或自动化手

段加以处理的那些事实、概念、场景和指示的表示形式,包括字符、符号、表格、声音和图

形等。数据可在物理介质上记录或传输,并通过外围设备被计算机接收,经过处理而得到结

果,计算机对数据进行解释并赋予一定意义后,便成为人们所能接受的信息。

计算机中数据的常用单位有位、字节和字。

1. 位(bit)

计算机中最小的数据单位是二进制的一个数位,简称为位。正如我们前面所讲的那样,

一个二进制位可以表示两种状态(0或1),两个二进制位可以表示四种状态(00、01、10、11)。

显然,位越多,所表示的状态就越多。

2. 字节(Byte)

字节是计算机中用来表示存储空间大小的最基本单位。一个字节由8个二进制位组成。

例如,计算机内存的存储容量、磁盘的存储容量等都是以字节为单位进行表示的。

除了用字节为单位表示存储容量外,还可以用千字节(KB)、兆字节(MB)以及十亿字节(GB)

等表示存储容量。它们之间存在下列换算关系:

1B=8bits

1KB=2

10

B=1024B

1MB=2

10

KB=2

20

B=1048576B

1GB=2

10

MB=2

30

B=1073741824B

3. 字(Word)

字和计算机中字长的概念有关。字长是指计算机在进行处理时一次作为一个整体进行处

理的二进制数的位数,具有这一长度的二进制数则被称为该计算机中的一个字。字通常取字

节的整数倍,是计算机进行数据存储和处理的运算单位。

计算机按照字长进行分类,可以分为8 位机、16位机、32位机和64位机等。字长越长,

那么计算机所表示数的范围就越大,处理能力也越强,运算精度也就越高。在不同字长的计

算机中,字的长度也不相同。例如,在8位机中,一个字含有8个二进制位,而在64位机

中,一个字则含有64个二进制位。

二、计数制与非计数制

在人类历史发展的长河中,先后出现过多种不同的记数方法,古代“系绳计事”,当然

文字出现后,采用符号的记数方式,其中有一些我们至今仍在使用当中,例如十进制和六十

进制、二十四进制等。

如今,大多数人使用的数字系统是基于10的。这种情况并不奇怪,因为最初人们是用

手指来数数的,要是人类进化成8个或12个手指,也许人类计数的方式会有所不同。英语

单词Digital(数字)可以指手指或脚趾,单词five(五)和单词fist(拳头)有相同的词根,出现这

种情况并不是巧合。

与十进制不同,古代巴比伦人则是使用以60为基数的六十进制数字体系,六十进制迄

今为止仍用于计时。使用六十进制,巴比伦人把75表示成“1,15”,这和我们把75分钟

写成1小时15分钟是一样的。

很长一段时间以来,罗马数字被认为用来做加减法运算非常容易,这也是罗马数字能够

在欧洲被长期用于记帐的原因。但使用罗马数字做乘除法则是很难的。其实,许多早期出现

的数字系统和罗马数字系统相似,它们在做复杂运算时存在一定的不足,随着时间的发展,

逐渐被淘汰掉了。

三、进位制和非进位制

对多种数制进行分析后,可将数制分为非进位制和进位制两种。

1. 非进位制及其特点

非进位制的特点是:表示数值大小的数码与它在数中的位置无关。

典型的非进位是罗马数字。例如,在罗马数字中:Ⅰ总是代表1,Ⅱ总是代表2,Ⅲ总

是代表3,Ⅳ总是代表4,Ⅴ总是代表5等。非进位表示数据不便、运算困难,现已基

本不用。

2. 进位制及其特点

进位制的特点是:表示数值大小的数码与它在数中所处的位置有关。

例如,十进制数123.45,数码1处于百位上,它代表1×10

2

=100,即1所处的位置具

有10

2

权;2处于十位上,它代表2×10

1

=20,即2所处的位置具有10

1

权;3代表3×10

0

=3;

而4处于小数点后第一位,代表4×10

-1

=0.4;最低位5处于小数点后第二位,代表5×

10

-2

=0.05。

如上所述,数据用少量的数码按先后位置排列成数位,并按照由低到高的进位方式进行

计数,我们将这种表示数的方法称之为进位制。

在进位中,每种数制都包含有几个基本要素。

数码:用不同的数字符号来表示一种数制的数值,这些数字符号就叫“数码”。

在R(R>1)进制中数码为0,1„„R-1(其中十六进制数为:0,1,2„„9,A,B,

C,D,E,F)。

基数:中所用到的数码的个数。例如,十进制的基数为10。

位权:一个数码处在某个位上所代表的数值是其本身的数值乘上所处数位的一个固定

常数,这个不同数位的固定常数称为位权。

说明,不管是任何数制,只是表示该数的方式不同,但该数的大小始终不变,所以它

们必然可以相互转换。

3、计算机处理的数据分为数值型和非数值型两类。

数值型数据指数学中的代数值,具有量的含义,且有正负之分、整数和小数之分;而

非数值型数据是指输入到计算机中的所有信息,没有量的含义,如数字符号0 ~ 9、大写

字母A ~ Z或小写字母a ~ z、汉字、图形、声音及其一切可印刷的符号 +、-、!、#、%、》… …

等。在计算机科学中,常用的数制是十进制、二进制、八进制、十六进制四种。 人们习惯

于采用十进位,简称十进制。但是由于技术上的原因,计算机内部一律采用二进制表示数据,

而在编程中又经常使用十进制,有时为了表述上的方便还会使用八进制或十六进制。因此,

了解不同及其相互转换是十分重要的。

四、为什么计算机中信息处理和数据的表示都采用二进制呢?

数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生

活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过

我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10

进制)的实践要比二或三进制计数出现的晚."(摘自<<数学发展史>>).在日常生活中人们并

不经常使用二进制,因为它不符合人们的固有习惯。但在计算机内部的数是用二进制来表示

的,这主要有以下几个方面的原因。

1、电路简单,易于表示

计算机是由逻辑电路组成的,逻辑电路通常只有两个状态。例如开关的接通和断开,

晶体管的饱和和截止,电压的高与低等。这两种状态正好用来表示二进制的两个数码0和1。

若是采用十进制,则需要有十种状态来表示十个数码,实现起来比较困难的。

2、可靠性高

两种状态表示两个数码,数码在传输和处理中不容易出错,因而电路更加可靠。

3. 运算简单

二进制数的运算规则简单,无论是算术运算还是逻辑运算都容易进行。十进制的运算规

则相对烦琐,现在我们已经证明,R进制数的算术求和、求积规则各有R(R+1)/2种。如采

用二进制,求和与求积运算法只有3个,因而简化了运算器等物理器件的设计。

4. 逻辑性强

计算机不仅能进行数值运算而且能进行逻辑运算。逻辑运算的基础是逻辑代数,而逻辑

代数是二值逻辑。二进制的两个数码1和0,恰好代表逻辑代数中的“真”(True)和“假”

(False)。

由于二进制具有这么多的优点,所以计算机中的数据和信息都采用二进制,当然输入到计算

机中的任何数值型和非数值型数据都必须转换为二进制。

五、常用进制的表示方法

方法一:把该数用小括号括起来在小括号的右下脚标明该进制的基数,如:(123.23)

10

说明数123.23为十进制数。如果是R进制,则表示为(„„)

R-1

方法二:在该数的后面加上相应的大写字母表示相应的进制。在计算机中,常常用到

的有二进制、八进制、十进制、十六进制。分别用字母B( Binary)表示二进制(如:

1110101.1101B为二进制数),用字母Q或者O( Octal)表示八进制(如:123Q为八进制数),

用字母D (Decimal)表示十进制(如:123D为十进制数),用字母H(Hexadecimal)表示十六

进制(如:123ABH为十六进制数)。

六、数制之间的相互转换

1、非十进制数(R进制)转换成十进制数

方法:按照位权展开求和(以二进制转换成十进制为例)扩展到一般形式,一个R进制

数,基数为R,用0,1,„,R-1共R个数字符号来表示,且逢R进一,因此,各位的位权

是以R为底的幂。

一个R进制数的按位权展开式为:

(N)

R

=k

n

×R

n

+k

n-1

×R

n-1

+„+k

0

×R

0

+k

-1

×R

-1

+k

-2

×R

-2

+„+k

-m

×R

-m

如:十进制数1999.123=1*10

3

+9*10

2

+9*10

2

+9*10

1

+1*10

-1

+2*10

-2

+3*10

-3

=1999.123D从该

例子可以看出,任何一个十进制数都可以按照位权展开求和,而且等式的两边的结果是相等

的。那么对于二进制而言当然也可以。

如:1111011.010B=( )D

按位权展开为:1*2

6

+1*2

5

+1*2

4

+1*2

3

+0*2

2

+1*2

1

+1*2

0

+0*2

-1

+1*2

-2

+0*2

-3

结果为123.375D

所以1111011.010B=(123.375)D

(1111.11)

2

= 1×2

3

+1×2

2

+1×2

1

+1×2

0

+1×2

-1

+1×2

-2

=15.75D

延伸:八进制、十六进制等R进制转换成十进制的方法为:先为该数进行标位(方法:

以小数点为分界限,整数部分方向从右向左从0,1„„进行标位,小数部分从左向右从-1,

-2„„进行标位),按照位权展开求和就完成了

又如:将(110.101)

2

、(16.24)

8

、(5E.A7)

16

转化为10进制数。

(A10B.8)

16

=10×16

3

+1×16

2

+0×16

1

+11×16

0

+8×16

-1

= 41227.5D

(110.101)

2

=1×2

2

+1×2

1

+0×2

0

+1×2

-1

+0×2

-2

+1×2

-3

=6.625D

(16.24)

8

=1×8

1

+6×8

0

+2×8

-1

+4×8

-2

=14.3125D

(5E.A7)

16

=5×16

1

+14×16

0

+10×16

-1

+7×16

-2

=94.6523D(近似数)

2、十进制转换成非十进制(R进制)(以十进制转换成二进制为主要例子)

方法:将十进制数转化为R进制数,只要对其整数部分,采用除以R取余法(余数为0

为止),最后将所取余数按逆序排列。而对其小数部分,乘2取整法(每一次的乘积必须变

为纯小数然后再作乘法,如果小数部分是5的倍数,则以最后小数部分为0为止,并否则

以约定的精确度为准,最后将所取整数按顺序排列)。

( 23 )

10

=( ? )

2

解: 2 │ 23

├────

2 │ 11 …… 余1(最低位)

└┬───

2 │ 5 …… 余1

├───

2 │ 2 …… 余1

├───

2 │ 1 …… 余0

└───

0 …… 余1(最高位)

即 ( 23 )

10

= ( 10111 )

2

又如:( 0.87 ) 10=( ? ) 2

解: 0.87

× 2

1.74 …… 整数部分1(最高位)

0.74

× 2

1.48 …… 整数部分1

0.48

× 2

0.96 …… 整数部分0

0.96

× 2

1.92 …… 整数部分1

0.92

× 2

1.84 …… 整数部分1

0.84

× 2

1.68 …… 整数部分1

0.68

× 2

1.36 …… 整数部分1(最低位)

即 (0.87)10=(0.1101111)2

其中,(23)(10110011)(0.87)(23.87)

10

=(101111.

10

=

210

=(0.1101111)

2

(近似取7位)

1101111)

2

从此例我们可以看出,因此一个十进制的整数可以精确转化为一个二进制整数,

但是一个十进制的小数并不一定能够精确地转化为一个二进制小数。

又如将(179.48)

10

化为八进制数。方法与以十进制转换成二进制一样

其中,(179)

10

=(263)

8

,(0.48)

10

=(0.365)

8

(近似取3位)因此,(179.48)

10

=(263.365)

8

那么将(179.48)

10

化为十六进制数。方法同上:

其中,(179)

10

=(B3)

16

,(0.48)

10

=(0.7A)

16

(近似取2位)所以,(179.48)

10

=(B3.7A)

16

与十进制数转化为二进制数类似,当我们将十进制小数转换为八进制或十六进制小数的

时候,同样会遇到不能精确转化的问题。那么,到底什么样的十进制小数才能精确地转化为

一个R进制的小数呢?

事实上,一个十进制纯小数p能精确表示成R进制小数的充分必要条件是此小数可表示

成k/Rm的形式(其中,k、m、R均为整数,k/Rm为不可约分数)。(可以作为选学)

下面,我们给出证明。必要性:如p能精确表示成R进制小数,则令:

p = l

1

R

-1

+l

2

R

-2

+„+l

i

R

-i

„„„„„„.(1)其中l

1

、l

2

、„、l

i

为小于R的整数,即p

可精确表示成R进制小数0.l

1

l

2

„l

i

。由(1)式可得:

p=R

-i

(l

1

R

i-1

+l

2

R

i-2

+ „l

i

)„„„„„„.(2)

(2)式中括号内显然为一整数,令其为k,又令m=i,则p=k/R

m

的必要性得证。

充分性:若p=k/R

m

,如k

如k>R 则可把k表示成:k=qR+a „„„„„„.

(3)其中q、a均为整数且a

p=q/R

m-1

+a/R

m

„„„„„„.(4)

(4)式中若qR则继续重复(3)式直至q

史>>)

3、非十进制(R进制)转换成非十进制(R进制)以(二进制、八进制、十六进制数之间的

转换为例子)

因为8=2

3

,所以需要3位二进制数表示1位八进制数;而16=2

4

,所以需要4位二进制数

表示1位十六进制数。由此我们可以看出,二进制、八进制、十六进制之间的转换是比较容

易的。

1. 二进制和八进制数之间的转换

二进制数转换成八进制数时,以小数点为中心向左右两边延伸,每三位一组,小数点前

不足三位时,前面添0补足三位;小数后不足三位时,后面添0补足三位。然后将各组二进

制数转换成八进制数。

如:将(10110011.011110101)

2

化为八进制。

010 110 011.011 110 101

2 6 3 .3 6 5

(10110011.011110101)

2

= 010 110 011.011 110 101= (263.365)

8

八进制转换成二进制数则可概括为“一位拆三位”,即把一位八进制写成对应的三位二

进制,然后按顺序连接起来即可。

如:将(1234)

8

化为二进制数。

1 2 3 4

001 010 011 100

(1234)

8

=001 010 011 100=(1010011100)

2

2. 二进制和十六进制数之间的转换

类似于二进制转换成八进制,二进制转换成十六进制时也是以小数点为中心向左右两边

延伸,每四位一组,小数点前不足四位时,前面添0补足四位;小数点后不足四位时,后面

添0补足四位。然后,将各组的四位二进制数转换成十六进制数。

如:将(1.011101)

2

转换成十六进制数。

0101 1010 1011 . 0111 0100

5 A B . 7 4

(1.011101)

2

=0101 1010 1011.0111 0100 =(5AB.74)

16

十六进制数转换成二进制数时,将十六进制数中的每一位拆成四位二进制数,然后按顺

序连接起来。

如:将(3CD)

16

转换成二进制数。

3 C D

0011 1100 1101

(3CD)

16

=0011 1100 1101=(1111001101)

2

3. 八进制数与十六进制数的转换

关于八进制与十六进制之间的转换,通常先转换为二进制数作为过渡,再用上面所讲的

方法进行转换。那么,用十进制可以达到目的吗,答案是肯定的。但当然要选择直接一点的

了。

如:将(3CD)16转换成八进制数。

(3CD)

16

=3 C D=0011 1100 1101=(1111001101)

2

=001 111 001 101=(1715)

8

4、

八进制数与十六进制数的转换

如:ABC3.01H=( )Q

ABC3.01H=(1010 1011 1100 . 0000 0001)B=(5274.002)Q

下表提供了在二进制、八进制、十六进制数之间进行转换时经常用到的数据,熟练掌握这些

基本数据是必要的。在转换过程中有非常重要的作用。

十进制 二进制 八进制 十六进制

0 0000 0 0

1 0001 1 1

2 0010 2 2

3 0011 3 3

4 0100 4 4

5 0101 5 5

6 0110 6 6

7 0111 7 7

8 1000 10 8

9 1001 11 9

10 1010 12 A

11 1011 13 B

12 1100 14 C

13 1101 15 D

14 1110 16 E

15 1111 17 F

附:二进制算术运算规则和逻辑运算规则

算术运算规则:

加法规则:0+0=0;0+1=1;1+0=1;1+1=10(向高位有进位)

减法规则:0-0=0;10-1=1(向高位借位);1-0=1;1-1=0

乘法规则:0×0=0;0×1=0;1×0=0;1×1=1

除法规则:0/1=0;1/1=1

逻辑运算规则:

逻辑与运算(AND):0∧0=0; 0∧1=0;1∧0=0;1∧1=1

逻辑或运算(OR):0∨0=0; 0∨1=1;1∨0=1;1∨1=1

逻辑非运算(NOT):0!=1 1!=0

逻辑异或运算(XOR):0⊕0=0; 0⊕1=1;1⊕0=1;1⊕1=0


本文标签: 表示 二进制 计算机 数据 进制