本文已参与「新人创作礼」活动,一起开启掘金创作之路。
第六章 计算机的运算方法
无符号数和有符号数
-
原码 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
-
反码 反码的表示方法是: 正数的反码是其本身 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
-
补码 补码的表示方法是: 正数的补码就是其本身 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
一、 无符号数
无符号数就是指正整数,机器字长的全部位数均用来表示数值的大小,相当于数的绝对值。
二、 有符号数
1、机器数与真值 带符号数是指在计算机中将数的符号数码化。在计算机中,一般规定二进制的最高位为符号位,最高位为“0”表示该数为正,为“1”表示该数为负。这种在机器中使用符号位也被数码化的数称为机器数,把带‘+’或‘-’符号的数称为真值。
根据符号位和数值位的编码方法不同,机器数分为原码,补码和反码。
2、原码表示法
机器数的最高位为符号位,0表示正数,1表示负数,数值跟随其后,并以绝对值形式给出。
这是与真值最接近的一种表示形式。为了区别整数和小数,约定整数的符号位与数值位之间用逗号隔开;小数的符号位与数值位之间用小数点隔开。 例
整数:
x = + 1110, x原码 = 0,1110;
x = - 1110,x原码 = 1,1110;
小数:
x = 0.1101, x原码 = 0.1101;
x = -0.1101, x原码 = 1.1101;
3、补码表示法 (1)补数 对模12来说,-5可以用其补数+7表示。 一个负数可用它的正补数来代替,而这个正补数可以用模加上负数本身求得。 一个正数和一个负数互为补数时,它们的绝对值之和即为模数。 正数的补数即该正数本身。 (2)补码 x=+1010,则x的补码位0,1010 x=-0.1101,则x的补码为1.0011。 当真值为负时,补码可由原码除符号位外每位取反,末位加1求得。
4、反码表示法 反码通常用来作为由原码求补码或者由补码求原码的中间过渡。
5、三种机器数总结 (1)三种机器数的最高位均为符号位。符号数和数值部分之间可用“.”(小数)或“,”(整数)隔开。 (2)当真值为正时,原码、补码和反码的表示形式均相同,即符号位用“0”表示,数值部分与真值相同。 (3)当真值为负时,原码、补码和反码的表示形式不同,但其符号位都用“1”表示,而数值部分有这样的关系,即补码是原码的“求反加1”,反码是原码的“每位求反”。 6、移码 同一个真值的移码和补码仅差一个符号位,若将补码的符号位由“0”改为“1”,或从“1”改为“0”,即可得到该真值的移码。
数的定点表示和浮点表示
符号位: 计算机如何存储数据,因为计算机世界里面所有的数据归根结底都是由0和1来存储的,那么如何表达数值的正负呢?只知道书本上说是有一个符号位,当该符号位为0时,表示的是正数,为1时表示负数。我那时没搞懂为什么这样规定,我觉得1么,代表正数挺合理的,那么0就自然表示负数咯,所以不解,只能死记硬背:0正1负。
一、定点表示
小数点固定在某一位置的数为定点数,当小数点位于数符和第一数值位之间时,机器内的数为纯小数;当小数点位于数值位之后时,机器内的数为纯整数。采用定点数的机器称为定点机。
二、浮点表示
1、浮点数是指小数点位置可浮动的数据,通常以下式表示: N = S × r的j次方 式中,S为尾数,j为阶码,r是基数。在计算机中,基数可取2、4、8或16等。 2、浮点数由阶码j和尾数S表示,阶码是整数,阶符和阶码的位数m合起来反应浮点数的表示范围及小数点的实际位置;尾数是小数,其位数n反映了浮点数的精度; 3、浮点数的规格化 将尾数最高位为1的浮点数称为规格化数,浮点数规格化后,其精度最高。 当基数为2时,尾数最高位为1的数为规格化数。规格化时,尾数左移一位,阶码减一;尾数右移一位,阶码加一。
定点运算
一、移位运算 1、算数移位规则 正数:原码、补码、反码 填0; 负数:原码 填0; 补码 左移填0,右移填1; 反码 填1; 2、 对于正数,三种机器数移位后符号均不变,左移时最高数位丢1,结果出错;右移时最低位丢1,影响精度。 对于负数,三种机器数算数移位后符号位均不变。负数原码左移时,高位丢1,结果出错;右移时,低位丢1,影响精度。负数的补码左移时,高位丢0,结果出错 3、算术移位和逻辑移位的区别 算术移位:有符号数的移位。 逻辑移位:无符号数的移位。 逻辑左移:低位填0,高位移丢。 逻辑右移:高位填0,低位移丢。
二、加减法运算 1、补码加减运算公式
2.例题
3、溢出判断 当运算结果超出机器数所能表示的范围时,称为溢出.显然,两个异号数相加或两个同号数相减,其结果是不会溢出的.仅当两个同号数相加或者两个异号数相减时,才有可能发溢出的情况,一旦溢出,运算结果就不正确了,因此必须将溢出的情况检查出来.判别方法有三种:
1〉当符号相同的两数相加时,如果结果的符号与加数(或被加数)不相同,则为溢出.
2〉当任意符号两数相加时,如果C=Cf,运算结果正确,其中C为数值最高位的进位,Cf为符号位的进位.如果C≠Cf ,则为溢出,所以溢出条件=C⊕Cf .
3〉采用双符号fs2fs1.正数的双符号位为00,负数的双符号位为11.符号位参与运算,当结果的两个符号位甲和乙不相同时,为溢出.所以溢出条件= fs2⊕fs1 ,或者溢出条件= fs2fs1 + fs2fs1
三、乘法运算
四、除法运算
五、算数逻辑单元 1、ALU电路 (组合逻辑电路) 针对每一种算术运算,都必须有一个相对应的基本硬件配置,其核心部件是加法器和寄存器。当需要完成逻辑运算时,势必需要配置相应的逻辑电路,而ALU电路是既能完成算术运算又能完成逻辑运算的部件。
ALU部件是运算器中的主要组成部分,又称多功能函数发生器,主要用于完成各种算术运算和逻辑运算.
ALU的算术运算部件包含加法器,减法器,乘法器,除法器,增量器(+1),减量器(-1),BCD码运算器等组件.
ALU的主要工作是根据CPU指令要求执行各种指定运算,如加法,减法,乘法,除法,比较,逻辑移位等操作.
2、快速进位链 (1)并行加法器 并行加法器由若干个全加器组成,为了提高运算速度,减少延迟时间,可以采用并行进位法,也叫提前进位或先行进位.
(2)串行进位链:是指并行加法器中的进位信号采用串行传递。
(3)并行进位链:是指并行加法器中的进位信号是同时产生的,又称先行进位、跳跃进位等。
1)单重分组跳跃进位:就是将n位全加器分成若干小组,小组内的进位同时产生,小组与小组之间采用串行进位,这种进位又有组内并行、组间串行之称。
2)双重分组跳跃进位:就是将n位全加器分成若干大组,每个大组又分成若干小组,而每个大组内所包含的各个小组的最高位进位是同时产生的,大组与大组间采用串行进位