购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2.3 二进制数编码

数据在计算机中的表现形式称为编码。

计算机通过输入设备(如键盘)输入的信息和通过输出设备输出的信息是多种形式的,既有数值型数据,也有非数值型数据,如字符、字母、各种控制符号及汉字等。计算机内部所有的数据均用二进制代码的形式表示,为此,需要对常用的数据及符号等进行编码,以表示不同形式的信息。

1.机器数与真值

一个数在计算机中的表示形式(编码)叫作机器数,而这个数本身(可以含符号“+”或“-”)称为机器数的真值。

在计算机中,二进制整数可分为无符号整数和有符号整数。

(1)无符号整数

对于二进制无符号整数,所有位都有与之相应的权值作为该位所表示的数值,其机器数就是二进制数本身。

例如:

N1=105=01101001B(表示N1的真值),其机器数为01101001。

8位无符号二进制数的机器数表示范围为:(00000000)2~(11111111)2(即0~28-1)。

16位无符号二进制数的机器数表示范围为:

(0000000000000000)2~(1111111111111111)2(即0~216-1)

n位二进制无符号整数的表示范围为:0~2n-1。

无符号整数在计算机中常用来表示存储器单元及输入/输出设备的地址。一般可用8位、16位或32位二进制数来表示,其取值范围分别为0~255、0~65535、0~232-1。

(2)有符号整数

对于二进制有符号整数的机器数(此类整数既可表示正整数,又可表示负整数),用二进制数的最高位表示符号位,最高位为“0”表示正数,最高位为“1”表示负数,其余各位取与之相应的权值作为该位所表示的数值。对于一个有符号数,可因其编码不同而有不同的机器数表示法。

2 . 原码、反码和补码 有符号数在计算机中的编码形式有原码、反码和补码3种。

(1)原码

如上所述,正数的符号位用“0”表示,负数的符号位用“1”表示,其数值部分不变,这种编码形式称为原码。

例如,以8位二进制数为例(以下均同),设两个数N1、N2,其真值为:

N1=105=+01101001B

N2=-105=-01101001B

则对应的原码为:

[N1]原=01101001B(最高位“0”表示正数)

[N2]原=11101001B(最高位“1”表示负数)

原码表示方法简单、直观,便于与真值进行转换。但计算机在进行减法操作时,实际上是把减法运算转换为加法运算,因此,必须引进反码和补码。

(2)反码与补码

对于正数,其反码、补码与原码表示方式相同。

仍以上面N1为例,则有:

[N1]补=[N1]反=[N1]原=01101001B

1)对于负数,其反码为对原码各位求反(即0变为1,1变为0)但符号位不变)。由于反码在计算机中计算时比较麻烦,一般不直接使用。反码通常作为求补码运算时的中间形式。

2)负数的补码为:原码的符号位不变,其数值部分按位取反后再加1(即负数的反码加1),称为求补。

仍以上面为例,N2=-105,则有

3)如果已知一个负数的补码,可以对该补码再进行求补码(即一个数的补码的补码)即可得到该数的原码,即[[X]补]补=[X]原,而求出真值。

例如,已知:[N2]补=10010111B

[N2]原=[[N]补]补=11101000B+1=11101001B

可得真值:N2=-105

【例 1-2 】已知数据A1、A2、A3、A4在存储单元以补码存储,形式分别为:10000001B 11111111B、10000010B、11111110B,求A1、A2、A3、A4的真值。

由于补码的最高位为1,表示负数,必须求出原码才能求其真值,故有:

对采用补码形式表示的数据进行运算时,可以将减法转换为加法。可以证明,补码加减法的运算规则为

其中X,Y为正负数均可,符号位参与运算

例如,设X=10,Y=20,求X-Y。

X-Y可表示为X+(-Y),即10+(-20)。

则有

再对[X+(-Y)]补求补码可得[X+(-Y)]原,即

[X+(-Y)]原=10001001B+1=10001010B

则X-Y的真值为-10D。

【例 1-3 】计算-7+3。

(-7)补码=11111001B

(+3)补码=00000011B

则运算如下:

对结果11111100求补:10000011+1=10000100(原码),即-4。

必须指出:所有负数在计算机中都是以补码形式存放的,补码表示仅为负数时才与原码有所不同。采用补码表示的n位二进制有符号整数的有效范围是:-2n-1~2n-1-1。

计算机在运算过程中,结果超出此允许范围,则称为发生溢出,即运算结果错误。

应当注意:对于8位二进制数,作为补码形式,它所表示的范围为:-27~27-1(即-128~127);而作为无符号数,它所表示的范围为:0~28-1即(0~255)。对于16位二进制数,作为补码形式,它所表示的范围为:-215~215-1(-32768~32767);而作为无符号数,它所表示的范围为:0~216-1(即0~65535)。所以,计算机中存储的任何一个数据,由于解释形式的不同,所代表的意义也不同。在编写汇编语言程序时,首先要确定数据的编码形式,然后按编码形式编写处理程序。因为计算机在执行程序时并不直接理解人们设置的编码,只是按照指令的功能对其进行运算和处理。

例如,某计算机存储单元的数据为84H,其对应的二进制数表现形式为10000100B,对于不同的编码,具有不同的含义。

1)该数若解释为无符号数编码,其真值为132。

2)该数若解释为有符号数编码,最高位为1可确定为负数的补码表示,则该数的原码为11111011B+1B=11111100B,其真值为124。

3)该数若解释为BCD编码,其真值为84D。

3 . 二-十进制编码

二-十进制编码又称BCD编码,这种编码形式既具有二进制数的形式,以便于存储,又具有十进制数的特点,以便于进行运算和显示结果。在BCD码中,用4位二进制代码表示1位十进制数。

常用的8421BCD码的对应编码见表1-5。

例如,将27转换为8421BCD码:

将105转换为8421BCD码

1-5 十进制编码( 8421BCD

因为8421BCD码中只能表示0000B~1001B(0~9)这十个代码,不允许出现代码1010B~1111B(因其值大于9),因而,计算机在进行BCD加法(即二进制加法)的过程中,若和的低四位大于9(即1001B)或低四位向高四位有进位时,为保证运算结果的正确性,低四位必须进行加6修正。同理,若和的高四位大于9(即1001B)或高四位向更高四位有进位时,为保证运算结果的正确性,高四位必须进行加6修正。

例如:

17+24=41在计算机中的操作为

4 . ASCII编码 前面介绍的是计算机中的数值型数据的编码,对于文字、符号、图像、声音等非数值信息在计算机中也必须以二进制数的形式存放在计算机存储器中。

这里仅介绍对于键盘字符型数据的ASCII编码。

美国标准信息交换码(American Standard Code for Information,ASCII)是一种国际标准信息交换码,它利用7位二进制代码来表示字符,再加上1位校验位,故在计算机中用1个字节8位二进制数来表示一个字符,这样有利于对这些数据进行处理及传输。

例如,键盘输入的十进制数字“0”“1”…“9”符号(不是指数值),26个大小写英文字母,键盘控制符号“CR”(回车)等,这些符号在由键盘输入时不能直接装入计算机,必须将其转换为特定的二进制代码(即将其编码),以二进制代码所表示的字符数据的形式装入计算机。

常用字符的ASCII码表示见表1-6

1-6 常用字符的 ASCII

ASCII码表见附录A。

英文字母A~Z的ASCII码从1000001(41H)开始顺序递增,字母a~z的ASCII码从1100001(61H)开始顺序递增,这样的排列对信息检索十分有利。

如字符A的ASCII码为41H(65);字符B的ASCII码为42H(66)。

数字0~9的编码是0110000B~0111001B,它们的高3位均是011,后4位正好与其对应的二进制数代码相同。如:字符1的ASCII码为31H(49);字符2的ASCII码为32H 50)。

〈Enter〉键(回车)的ASCII码为0DH(13)。 Q5ziDzEjwFJetXawTI9nl3hiToyIZvpLbyK7HEkNWorp6LhkVkbFxctUHdhNHLWa

点击中间区域
呼出菜单
上一章
目录
下一章
×