4.移位计算,乘除法运算

目录

一. 移位计算

(1)算数移位

(2)逻辑移位

(3)循环移位

二. 乘法运算

(1)原码的乘法运算

(2)补码的乘法运算

三. 除法运算

(1)原码的除法运算

(2)补码的除法运算

四. C语言中的类型转换

五. 数据的存储和排列

(1)大小端模式

(2)边界对齐


一. 移位计算

(1)算数移位

移位:通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权。可用移位运算实现乘法、除法。

r进制,右移k位小数点,相当于乘以r^k,左移k位小数点,相当于除以r^k

4.移位计算,乘除法运算_第1张图片

a.原码的算数移位―—符号位保持不变,仅对数值位进行移位。

  • 右移:高位补0,低位舍弃。若舍弃的位=0,则相当于÷2;若舍弃的位不等于0,则会丢失精度。
  • 左移:低位补0,高位舍弃。若舍弃的位=0,则相当于×2;若舍弃的位不等于0,则会出现严重误差。

b.反码的算数移位

正数的反码与原码相同,因此对正数反码的移位运算也和原码相同。

  • 右移:高位补0,低位舍弃。左移:低位补0,高位舍弃。

负数的反码数值位与原码相反,因此负数反码的移位运算规则需要调整。

  • 右移:高位补1,低位舍弃。左移:低位补1,高位舍弃。

c.补码的算数移位

正数的补码与原码相同,因此对正数反码的移位运算也和原码相同。

  • 右移:高位补0,低位舍弃。左移:低位补0,高位舍弃。

负数补码=反码末位+1,导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止。(负数补码中,最右边的1及其右边同原码。最右边的1的左边同反码)

  • 右移(同反码):高位补1,低位舍弃。左移(同原码):低位补0,高位舍弃。

4.移位计算,乘除法运算_第2张图片

(2)逻辑移位

逻辑右移:高位补0,低位舍弃。逻辑左移:低位补0,高位舍弃。

(3)循环移位

4.移位计算,乘除法运算_第3张图片

二. 乘法运算

(1)原码的乘法运算

二进制的手算过程:

4.移位计算,乘除法运算_第4张图片

原码一位乘法:机器字长n+1,数值部分占n位。符号位通过异或确定;数值部分通过被乘数和乘数绝对值的n轮加法、移位完成根据当前乘数中参与运算的位确定(ACC)加什么。若当前运算位=1,则(ACC)+[|x|]原;若=0,则(ACC)+0。每轮加法后ACC、MQ的内容统一逻辑右移(ACC左边补零,MQ右面移除的位丢弃)。

已经确定的乘积,也叫部分积。

4.移位计算,乘除法运算_第5张图片

(2)补码的乘法运算

补码的乘法运算和原码极为类似,但有以下不同:

4.移位计算,乘除法运算_第6张图片

4.移位计算,乘除法运算_第7张图片

举例:

设机器字长为5位(含1位符号位,n=4) , x=-0.1101,y= +0.1011,采用Booth算法求x*y

x[补]=11.0011,[-x]补=00.1101,[y]补=0.1011
 

4.移位计算,乘除法运算_第8张图片

三. 除法运算

(1)原码的除法运算

设机器字长为5位(含1位符号位,n=4),x=0.1011,y=0.1101,采用原码恢复余数法求x/y,

x=0.1011,y=0.1101,[|y|]补=0.1101,[-|y|]补=1.0011
符号单独处理:符号位=被除数和除数的符号位取异或,数值位取绝对值进行除法计算。
实现方法:上商0/1,得到余数,余数末尾补0

4.移位计算,乘除法运算_第9张图片

4.移位计算,乘除法运算_第10张图片

左移n次,上商n+1次,最后一次上商余数不左移。

不恢复余数法:对恢复余数法的简化:

4.移位计算,乘除法运算_第11张图片

4.移位计算,乘除法运算_第12张图片

4.移位计算,乘除法运算_第13张图片

(2)补码的除法运算

设机器字长为5位(含1位符号位,n=4),x=+0.1000,y=-0.1011,采用补码加减交替除法求x/y。

[x]补=00.1000,[y]补=11.0101,[-y]补=00.1011

补码除法的规则:

4.移位计算,乘除法运算_第14张图片

  • 符号位参与运算,被除数/余数、除数采用双符号位;
  • 被除数和除数同号,则被除数减去除数。被除数和除数异号,则被除数加上除数;
  • 余数和除数同号,商1,余数左移一位减去除数;余数和除数异号,商0,余数左移一位加上除数。
  • 重复n次,末位商恒置1。

4.移位计算,乘除法运算_第15张图片

四. C语言中的类型转换

4.移位计算,乘除法运算_第16张图片

五. 数据的存储和排列

(1)大小端模式

大端方式:更容易人类理解;小端方式:更容易计算机实现读取。

4.移位计算,乘除法运算_第17张图片

(2)边界对齐

现代计算机通常是按字节编址,即每个字节对应1个地址,通常也支持按字、按半字、按字节寻址。假设存储字长为32位,则1个字=32bit,半字=16bit。每次访存只能读/写1个字:

4.移位计算,乘除法运算_第18张图片

你可能感兴趣的:(计算机组成原理,1024程序员节,计算机组成原理)