第二章 数据的表示和运算

一、进位计数制及其相互转换

(一)进位计数制

数制也称为计数制,是指用一组固定的符号和统一的规则来表示数值的方法。

一般来说,比较常用的进位计数制包括二进制、八进制、十进制和十六进制。

(二)进制转换

1.其他进制数转换为十进制

将其他进制数的各位数码与它们的权值相乘,再把乘积相加,就得到了一个十进制数,

这种方法称为按权展开相加法。

如(185)16=1×162+8×161+5×16^0,其他进制数以此类推,如 2 进制的数的权值为 2

的倍数,8 进制的数的权值为 8 的倍数。

2.十进制数转换为其他进制数

一个十进制数转换为任意进制数,常采用基数乘除法。这种转换方法对十进制数的整数部分和小数部分将分别进行处理,对整数部分用除基取余法,对小数部分用乘基取整法

最后将整数部分与小数部分的转换结果拼接起来

  • 除基取余法(整数部分的转换):整数部分除基取余,最先取得的余数为数的最低位,最后取得的余数为数的最高位,商为 0 时结束。

  • 乘基取整法(小数部分的转换):小数部分乘以基数然后取整,最先取得的整数为数的最高位,最后取得的整数为数的最低位,乘积为 1.0 时结束。

最后,将所有余数按照从下到上的顺序写出为 1111011,即是整数 123 转换为 2 进制

数的表示

小数部分 0.6875 计算规则是按照乘积取整法进行,结束标志为取 1 后的余数为 0,

如下

整数部分转二进制,需要倒着写,但是小数部分转二进制不需要倒着写

二进制转八进制

对于一个二进制混合数(既包含整数部分,又包含小数部分),转换时候,应该以小数点为界。整数部分,从小数点开始往左数,把一串二进制数分为3位一组,在数的左边可以根据需要加0补齐。对于小数部分,从小数点开始往右数,也将一串二进制数分为3位一组,在数的最右边也可以根据需要加0补齐。最终使得总的位数为3的整数倍,然后分别用对应的八进制数取代。

例题:将二进制数 1111000101.00110101 转换为八进制数。

整数部分,三位一组 001 111 000 101,对应的八进制数为:1705

小数部分,三位一组 .001 101 010 对应的八进制为:.152

所以最后转换成的八进制为: 1705.152

二进制转十六进制

和二进制转换为八进制类似,只不过把数串按照4位分为一组进行

举例:

1111000101.00110101 转换为十六进制数。

整数部分,从小数点左边开始数,4位一组 0011 1100 0101 ,转换为16进制为3C5

小数部分,从小数点右边开始数,4位一组 .0011 0101,转换为16进制为 .35

因此1111000101.00110101 转换为十六进制数为: 3C5.35

二.真值与机器数

真值

真值:在我们日常生活中见到的用正号、负号来分别表示正数(正号可省略)和负数

如+10、-276 等就称为真值。这种带“+”或“-”符号的数称为真值。真值是机器数所代表的实际值。

机器数

在计算机中,通常将数的符号和数值部分一起编码,将数据的符号数字化,由于数值的正负正好可以通过二进制的 0 和 1 代表,所以通常用“0”表示“正”,用“1”表示“负”。

这种将符号“数字化”的数称为机器数。常用的有原码、补码和反码表示法。

三.字符与字符串

(一)字符编码与 ASCII 码

计算机中的信息包括数据信息和控制信息,数据信息又分为数值和非数值信息。非数值信息和控制信息包括字母、各种控制符号、图形符号等,它们都以二进制编码方式存入计 算 机 并 得 以 处 理 , 这 种 对 字 母 和 符 号 进 行 编 码 的 二 进 制 代 码 称 为 字 符 代 码(CharacterCode)。

在计算机中,最常用的字符编码是 ASCII 码,它包括 10 个十进制数码,26 个英文字母和一定数量的专用符号,如$、%、+等,总共 128 个元素,因此二进制编码需要 7 位,加上一个校验位共 8 位,刚好一个字节

(二)汉字编码

汉字编码主要包括汉字的输入编码、汉字内码和汉字字形码三种。内码:是为了在计算机内表示汉字而采取统一的编码方式所形成的汉字编码;

输入码:为方便汉字输入而形成的汉字编码;

字形码:为显示输出和打印输出汉字而形成的汉字编码,也称为字模码、输出码。

区位码和国标码是输入编码。区位码是国家标准局于 1981 年颁布的标准,用两个字节表示一个汉字,每个字节用七位二进制编码,将汉字和图形符号排列在一个 94 行 94 列(94的二讲制表示需要 7 位二进制数)的二维代码表中。国标码是将十进制的区位码转换成十六进制后,再在每个字节加上 20H,即加上 2020H。若将国标码的两个字节的最高位都改为“1”,就是汉字内码。故三种汉字编码的关系为(十六进制表示)∶

(三)字符串

字符串是指连续的一串字符,通常情况下,它们占用主存连续的多个字节,每个字节存一个字符。其中英文字符串是计算机按字节编址,每个内存地址对应一个字节,最后一个字符往往是结束标志;中文字符是以两字节表示一个汉字

当主存字由 2 个或 4 个字节组成时,在同一个主存字中,既可按从低位字节向高位字节的顺序存放字符串的内容,也可按从高位字节向低位字节的顺序存放字符串的内容,这个取决于使用的机器。

二.定点数的表示和运算

一.定点数的表示

根据小数点的位置是否固定,在计算机中有两种数据格式:定点表示和浮点表示。

在现代计算机中,通常用定点补码整数表示整数,用定点原码小数表示浮点数的尾数部分,用移码表示浮点数的阶码部分

(一)机器数的定点表示

定点小数。定点小数是纯小数,约定小数点位置在符号位之后、有效数值部分最高位
之前。

若数据 X 的形式为 X=x0x1x2…xn(其中 x0 为符号位,x1~xn 是数值的有效部分,
也称尾数,x1 为最高有效位),则在计算机中的表示形式如图 2.1 所示

定点整数。定点整数是纯整数,约定小数点位置在有效数值部分最低位之后。

若数据
X 的形式为 X=x0x1x2…xn(其中 x0 为符号位,x1~xn 是尾数,xn 为最低有效位),则在计算机中的表示形式如图 2.2 所示

定点数编码主要可以用原码、补码、反码和移码四种表示法。

无符号数和有符号数

无符号数

机器字长:寄存器的位数

无符号数,就是没有富豪的数,在寄存器中的每一位都可以用来存放数值

当机器字长为16位的时候,

无符号数的表示范围为0~2^16 -1也就是0~65535

有符号数

机器数与真值:

对有符号数而言,符号的"正",“负”机器无法识别。

用0表示正,1表示负

把符号数字化的数称为 机器数,把带"+“或者”-"符号的数称为真值。

原码表示法

符号位为0表示正数,符号位为1表示负数,数值位即真值的绝对值

为了方便书写和区别整数和小数,约定整数的符号位与数值位之间用逗号分隔开,小数的符号位与数值位之间用小数点分隔开

比如

例子:

原码中的0有两种表示形式:

0.0000

1.0000

补码表示法

正数的补码

整数的补码:

小数的补码:

很简单,符号位不变,数值位取反,然后加1

补码中的0只有一种表示形式