《计算机组成与体系结构(原书第4版)》 您所在的位置:网站首页 壁挂炉球阀品牌前十大排名榜有哪些 《计算机组成与体系结构(原书第4版)》

《计算机组成与体系结构(原书第4版)》

2023-10-05 05:25| 来源: 网络整理| 查看: 265

2.4.7 使用移位进行二进制乘法和除法

移位一个二进制数意味着左移或右移一定的位数。例如,二进制数值00001111向左移一位得到的结果是00011110(如果我们在右边填上一个零)。第一个数是十进制值15,第二个是十进制30,这恰好是第一个数的两倍。这不是巧合!

当使用有符号数的2的补码时,可以使用一个名为算术移位的特殊类型的移位,以快速且容易地执行乘以2和除以2的操作。回想在2的补码中,最左边的位决定它的符号,所以必须小心移动这些值,我们不能改变符号位,当乘以2或除以2时不应该改变该数的符号。

我们可以执行算术左移(将数字乘以2)或算术右移(将数字除以2)。假设位的编号是从右到左并从0开始编号,有以下对算术左右移位的定义。

算术左移插入一个0到b0位,并将所有其他位向左移一个位置,使得bn-1位被bn-2位替代。bn-1位是符号位,如果该位的值发生改变,则会引起操作溢出。在二进制数中,乘以2总是使得最右一位等于0,这是一个偶数,因此解释了为什么用一个零填充最右边。思考以下示例:

例2.28计算11(使用8位有符号数的2的补码表示)乘以2的结果。

我们从计算11的二进制值开始:

0 0 0 0 1 0 1 1

左移一位,结果是:

0 0 0 1 0  1 1 0

这是十进制22=11×2。没有溢出发生,所以这个值正确。

例2.29计算12(使用8位有符号数的2的补码表示)乘以4的结果。

我们从计算12的二进制值开始:

0 0 0 0 1 1 0 0

左移两位(每次移位相当于乘以2,所以两次移位等于乘以4),结果是:

0 0 1 1  0 0 0 0

这是十进制的48=12×4。没有溢出发生,所以这个值正确。

例2.30计算66(使用8位有符号数的2的补码表示)乘以2的结果。

我们从计算66的二进制值开始:

0 1 0 0 0 0  1 0

左移一位,结果是:

1 0 0 0 0  1 0 0

但是符号位已经改变了,所以发生了溢出(66×2=132,这个数太大,不能使用8位有符号数的2的补码表示)。

算术右移是将所有位向右移动,但复制符号位从bn-1位到bn-2位。因为我们从右到左复制符号位,所以溢出不是一个问题。然而,除以2可能有一个余数1;使用这种方法的除法运算是严格的整数除法,所以在任何情况下余数都不能被存储。思考以下示例:

例2.31计算12(使用8位有符号数的2的补码表示)除以2的结果。

我们从计算12的二进制值开始:

0 0 0 0  1 1 0 0

右移一位,复制符号位0,结果是:

0 0 0 0 0  1 1 0

这是十进制的6=12÷2。

例2.32计算12(使用8位有符号数的2的补码表示)除以4的结果。

我们从计算12的二进制值开始:

0 0 0 0 1 1 0 0

右移两位,结果是:

0 0 0 0  0 0 1 1

这是十进制的3=12÷4。

例2.33计算-14(使用8位有符号数的2的补码表示)除以2的结果。

我们从计算-14的2的补码表示开始:

1 1 1 1 0 0 1 0

右移一位(带符号位),结果是:

1 1 1 1 1 0 0 1

这是十进制的-7=-14÷2。

注意,如果我们将-15除以2(见例2.33),结果是将是11110001向左移动一位得到11111000,这是-8。因为我们做的是整数除法,所以-15除以2确实等于-8。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有