510 likes | 809 Vues
数制与码制 复习. 2011 年 7 月. 控制科学与工程学院. 1. 数制 常用数制 数制间的转换 二进制数的运算 2. 码制 机器数与真值 原码、反码及补码 常用编码. 微型计算机中的常用数制. 微型计算机中常用的数制有三种: 十进制数 二进制数 十六进制数. 1 . 十进制数 十进制数是我们最熟悉的一种进位计数制, 其主要特点是: (1) 它由 0 、 1 、 2 、 3 、 4 、 5 、 6 、 7 、 8 、 9 不同的基本数码符号构成,基数为 10 。 (2) 进位规则是“ 逢十进一 ”,一般在数的后面加符号 D 表示十进制数。
E N D
数制与码制复习 2011年7月 控制科学与工程学院
1. 数制 • 常用数制 • 数制间的转换 • 二进制数的运算 • 2. 码制 • 机器数与真值 • 原码、反码及补码 • 常用编码
微型计算机中的常用数制 微型计算机中常用的数制有三种: • 十进制数 • 二进制数 • 十六进制数
1.十进制数 十进制数是我们最熟悉的一种进位计数制, 其主要特点是: (1)它由0、1、2、3、4、5、6、7、8、9不同的基本数码符号构成,基数为10。 (2)进位规则是“逢十进一”,一般在数的后面加符号D表示十进制数。 所谓基数,在数学中指计数制中所用到的数码的个数。
2.二进制数 二进制数是计算机内的基本数制,其主要 特点是: (1) 任何二进制数都只由0和1两个数码组 成,其基数是2。 (2)进借位规则是“逢二进一,借一当二”。 一般在数的后面用符号B表示这个数是二进制数。 二进制数同样可以用幂级数形式展开。
MSB LSB 位号: D7 D6 D5 D4 D3 D2 D1 D0 (3) 字节byte:8位二进制数约定为1字节 字节: 一个字节可表示28个值(0~255) LSB: 最低有效位,D0位 MSB:最高有效位,D7位
(4) 字word:2字节,16位二进制数 一个字有216个值(0~65535) LSB: 最低有效位, D0位 MSB: 最高有效位, D15位
3.十六进制数 在微机软件编程时,十六进制数常用于代码和数据的缩写,其主要特点是: (1) 十六进制数由16个数符构成:0、1、2、…、9、A、B、C、D、E、F,其中A、B、C、D、E、F分别代表十进制数的10、11、12、13、14、15,其基数是16。 (2) 进借位规则是“逢十六进一,借一当十六”。一般在数的后面加一个字母H表示是十六进制数。
数制间的转换 1.二进制数与十六进制数的转换 (1) 二进制数转化成十六进制数 采用四位二进制数合成一位十六进制数的方法,以小数点开始分成左侧整数部分和右侧小数部分。 二进制数转换十六进制数: 0001 1011 1110 0011 . 1001 0111 1000B 1 B E 3 . 9 7 8H
将十六进制数的每位分别用四位二进制数码表示,然后把它们连在一起即为对应的二进制数。将十六进制数的每位分别用四位二进制数码表示,然后把它们连在一起即为对应的二进制数。 十六进制数转换为二进制: 9 A B . 7 C 5 H 1001 1010 1011 . 0111 1100 0101B (2) 十六进制数转换成二进制数
2. 二进制数与十进制数间的转换 (1)二进制数转换成十进制数 将二进制数按权展开后相加即得到对应的十进制数。 各位的权为进制r的相应次幂 例 将1001B转换成十进制数。 解:按权相加得: 1001B = 1×23+1×20 = 8+1 = 9D = 9 其中,十进制数的后缀“D”可省略。
小数的转换 对于小数, 0.101B = 1×2-1 + 0×2-2 + 1×2-3 = 0.625D 二进制数每一位的权是:以小数点分界, …..24 , 23 , 22 , 2 1, 2 0 . 2-1, 2-2, 2 -3, ……
十进制数的整数部分和小数部分转化成二进制数的方法不同,要将它们分别转换,然后将结果合并到一起即得到对应的二进制数。十进制数的整数部分和小数部分转化成二进制数的方法不同,要将它们分别转换,然后将结果合并到一起即得到对应的二进制数。 ①十进制整数转成二进制整数的常用方法是“除2取余法”,即用2连续去除要转换的十进制数和所得的商,直到商小于2为止,依次记下各个余数,然后按最先得到的余数为最低位,最后得到的余数为最高位依次排列,就得到转换后的二进制整数。 (2) 十进制数转化成二进制数
例1、将十进制数45转换成二进制数。 2 45 余数 2 22 1 11 0 2 2 5 1 1 2 2 2 1 0 1 0 即 45 = (101101)B
②十进制小数转换成二进制小数的常用方法是“乘2取整法”,即用2连续去乘要转换的十进制小数部分和前次乘积后的小数部分,依次记下每次乘积的整数部分,直到小数部分为0或满足所需要的精度为止,然后按最先得到的整数为二进制小数的最高位,最后得到的为最低位依次排列,就得到转换后的二进制小数。②十进制小数转换成二进制小数的常用方法是“乘2取整法”,即用2连续去乘要转换的十进制小数部分和前次乘积后的小数部分,依次记下每次乘积的整数部分,直到小数部分为0或满足所需要的精度为止,然后按最先得到的整数为二进制小数的最高位,最后得到的为最低位依次排列,就得到转换后的二进制小数。
0.6875 ×2 最高位 取 1 1.3750 0.375 × 2 取 0 0.750 × 2 取 1 1. 50 0.5 × 2 最低位 取 1 1. 0 从上至下写成从左至右 0.6875D = 0. 1011 B
例 将45.6789转换为二进制数,其中二进制小 数保留4位。 解: ∴ 45.6789 = 101101.1011B
3.十六进制数和十进制数间的转换 (1)十六进制数转换成十进制数 将十六进制数按权展开后相加即得到对应的十进制数。 例1.5 将十六进制数3FEA换成十进制数。 解:3FEAH = 3×163+15×162+14×161+10×160 = 16362 D = 16362 3AB . 11H = 3×162+A×161+B×160+1×16-1+1×16-2 =939 . 0664 D
(2) 十进制数转换成十六进制数 与十进制数转换成二进制数类似, 十进制整数部分采用“除16取余逆排法”, 十进制小数部分采用“乘16取整顺排法”。
例 将3901.76171875转换成十六进制数。 ∴ 3901.76171875=F3D.C3H
二进制数的运算 • 算术运算 • (1) 加法运算 运算规则为:0+0=0 、1+0=0+1=1、 1+1=10(向高位有进位)。 • (2) 减法运算 运算规则为:0-0=0、1-0=1、1-1=0、 0-1=1(向高位借1当作2)。
(3) 乘法运算 运算规则为:0×0=0、0×1=1×0=0、 1×1=1。 • (4) 除法运算 除法运算是乘法运算的逆运算。与十进制类似,从被除数最高位开始取出与除数相同的位数,减去除数。
逻辑运算 微机内二进制信息的逻辑运算由专门的逻辑电路完成。 (1) 逻辑与运算 逻辑与常用符号“&”表示,运算规则为: • 0&0=0,1&0=0,0&1=0,1&1=1 • 两个位数相同的二进制数进行逻辑与时,只是对应位进行与运算。
(2) 逻辑或运算 逻辑或又称为逻辑加,常用符号“”表示,其运算规则为: 0 0=0,1 0=1,0 1=1,1 1=1。 (3) 逻辑非运算 逻辑非运算又称逻辑取反,常用运算符号“~”表示.
(4) 逻辑异或运算 逻辑异或又称半加,是不考虑进位的加法,常用运算符号^表示。 例72H ^ABH = ? 解:0111 0010 B ^ 1010 1011 B 1101 1001 B ∴ 72H ^ ABH = 11011001B = D9H
1. 数制 • 常用数制 • 数制间的转换 • 二进制数的运算 • 2. 码制 • 机器数与真值 • 原码、反码及补码 • 常用编码
机器数与真值 • 在计算机内部,所有信息都是用二进制数串(0、1)的形式表示的。 • 整数通常都有正负之分,计算机中的整数分为无符号的和带符号的。 • 无符号的整数用来表示0和正整数, • 带符号的整数可以表示所有的整数。 • 由于计算机中符号和数字一样,都必须用二进制数串来表示,因此,正负号也必须用0、1来表示。
通常我们用最高的有效位来表示数的符号(当用8位来表示一个整数时,第8位即为最高有效位,当用16位来表示一个整数时,第16位即为最高有效位。)通常我们用最高的有效位来表示数的符号(当用8位来表示一个整数时,第8位即为最高有效位,当用16位来表示一个整数时,第16位即为最高有效位。) • 0表示正号、1表示负号。 • 这种正负号数字化的机内表示形式就称为“机器数”, • 相应的机器外部用正负号表示的数称为“真值”。 • 将一个真值表示成二进制字串的机器数的过程就称为编码。
机器数 • 机器数分为无符号数、有符号数 • 无符号数如: 00000001、10010011、01010010、 …… 等等, 范围: 00H ~ FFH。 • 有符号数如: • +1010110B(+56H)、-1101001B(-69H) 真值 真值 机器数 01010110B、 11101001B 56H E9H
原码、反码和补码 • 无符号数没有原码、反码和补码一说。只有带符号数才存在不同的编码方式。 • 计算机内一般使用补码。 • (1)原码 • “+”用0表示,“-”用1表示,数值部分为该数本身,这样的机器数叫原码。 • 如,[+3]原= 0000 0011B • [-3]原= 27 - (-3) = 1 000 0011B • 0有两种表示方法:00000000 —— +0 • 10000000 —— -0 • 原码最大、最小的表示:+127、-127
(2)反码 • 正数的反码等于原码 • 负数的反码是将原码的数值位各位取反 • [+4]反= [+4]原= 0000 0100 B • [-5]反= 1 111 1010 B • 反码范围:-127 ~ +127 • 两个0: +0 —— 00000000 B • -0 —— 11111111 B
12 3 (3)补码 计算机中,带符号数的运算均采用补码。 • 正数的补码与其原码相同; • 负数的补码为其反码末位加1。 • 补码的概念:现在是下午3点,手表停在12点,可正拨3点,也可倒拨9点。即是说-9的操作可用+3来实现,在12点里:3、-9互为补码。 • 运用补码可使减法变成加法。
如,设X = - 0101110 B , 则[X]原= 1 0101110 B • 则[X]补= [X]反+ 1 = 1 1010001 + 00000001 = 11010010 B • 如,[+6]补= [+6]原= 00000110 B • [-6]补= 1 111 1001 +0000 0001= 1111 1010 B • 8位补码的范围 –128 ~ +127。 • 0 的补码:只一个,即00000000 • 而10000000 B是-128的补码。 • 原码、反码、补码对照表:见下表 • 注意,只是带符号的整数采用补码存储表示的,浮点数另有其存储方式。
八位二进制数所能表示的数据范围 机器数 无符号数 原码 反码 补码 00000000 0 +0 +0 +0 00000001 1 +1 +1 +1 . . . . . 01111111 127 +127 +127 +127 10000000 128 -0 -127 -128 10000001 129 -1 -126 -127 . . . . . . . . . . 11111110 254 -126 -1 -2 11111111 255 -127 -0 -1
(4)补码的运算 当X≥0时,[X]补= [X]反=[X]原 [ [X]补]补= [X]原[X]补+ [Y]补= [ X+Y ]补 [ X-Y ]补= [ X+(-Y)]补 例:已知X=52 Y=38 求X-Y 减法运算结果: X-Y = 52-38 =14 [52]原 0 0 1 1 0 1 0 0 [38]原 -) 0 0 1 0 0 1 1 0 [14]原 0 0 0 0 1 1 1 0
计算机运算过程: 用补码加法实现减法 X-Y = [ [ X-Y]补]补 = [ [X]补+[-Y]补]补 =[ [52]补+[ -38]补]补 =[ 14 ]补=14 [52]补: 0 0 1 1 0 1 0 0 [-38]补:+) 1 1 0 1 1 0 1 0 1 0 0 0 0 1 1 1 0 自然舍弃
采用补码运算具有如下特征: • 因为使用补码可以将符号位和其他位统一处理(采用原码和反码表示时,符号位不能同数值一道参加运算) • 减法也可以按加法来处理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现。 • 两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃
这样的运算有两个好处: • 使符号位能与有效值部分一起参加运算,从而简化运算规则。从而可以简化运算器的结构,提高运算速度;(减法运算可以用加法运算表示出来。) • 加法运算比减法运算更易于实现。使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
常用编码 • 对机器:二进制数方便, • 对人 :二进制数不直观,习惯于十进制数。 • 在编程过程中,有时需要采用十进制运算,但机器不认识十进制数。 • 怎么办? • BCD码 • ASCII码
1.BCD码 BCD码是将每一位十进制数用二进制数编码,它保留了十进制的权,数字则用二进制数表示,因而也称为二-十进制数。一般用标识符[…]BCD表示。BCD码种类较多,如8421码、2421码、格雷码等,其中最常用的编码为8421码。
(1) 8421码编码方法 8421码编码原则是每位十进制数用4位二进制数来表示,8、4、2、1代表4位二进制数每一位的权。8421码名称也由此而得。十进制数共有0~9十个数字,而4位二进制数共有16种组合。8421码用其中0000B~1001B组合表示0~9十个十进制数。而1010B~1111B六个编码舍去不用。它们之间的对应关系如表所示。
(2) BCD码的运算 BCD码用4位二进制数表示0~9十个十进制数,但4位二进制数可表示16种状态。因而有六种状态在BCD编码中为非法码。这样在BCD码的运算中必须进行修正才能得到正确的结果。
压缩的BCD码 它是一种用4位二进制数表示十进制数. 首先是用四位二制数表示个位,然后用四位二进制数表示十位, 然后百位...。 比如:251需要三个四位二进制数表示。 1表示为0001;5表示为0101;2表示为0010. 最后251的BCD数据表示为0010 0101 0001. 非压缩BCD码 非压缩的BCD码用8位二进制数表示一个十进制数位,其中低4位是BCD码,高4位是0。 251的非压缩BCD数据表示为00000010 00000101 00000001. 采用压缩BCD码比采用非压缩BCD码节省存储空间。
BCD码与二进制数区别 • 当用来表示十进制数字0-9时,用二进制代码与8421BCD代码完全相同。 • 而当表示的十进制数字大于9时,用二进制代码与8421BCD代码表达就完全不同了。 • 用二进制表示就是二进制数字安权重求和,其值为十进制数字; • 用8421BCD代码则是每一位十进制数字都用4位8421BCD代码表示。如十进制数字15,转化为二进制为1111;用8421BCD码表示为0001 0101。
2. ASCII码 • 计算机不仅要认识各种数字,还要能识别各种文字符号。 • 计算机能识别0、1、0、1、……;这些0、1、0、1、……有的代表数值,有的仅代表要处理的信息(如字母、标点符号、数字符号等文字符号) • 人们事先已对各种文字符号进行二进制数编码。
ASCII码(American Standard Coded for Information Interchange)是“美国信息交换标准码”的简称,后来由国际标准组织(ISO)确定为国际标准字符编码。它是微机中最常使用的字符编码。 ASCII码由7位二进制码构成,可表示128(27=128)个字符,ASCII码表见表 。
综上所述, 计算机中的数可以有各种不同的表示方法, 计算机中以一个字节为一个单元保存数据, 一个字节为8位二进制数,可以有256种组合, 也就是可以表示256个数据, 我们称它为机器数,每一个机器数实际表示的是什么, 要看采用的是哪种表示方法。