深入理解计算机系统 练习题2.40 答案与分析

K 移位 加法/减法 表达式
6 2 1 (x << 2) + (x<<1)
31 1 1 (x <<5 ) - x
-6 2 1 (x << 1) - (x << 3)
55 2 2 (x << 6) - (x <<3) - x

第一行6的二进制表示我为0110,所以n=2,m=1
形式A:
x * k = (x << 2) + (x<<1)
形式B:
x * k = x * ( 2 3 2^3 - 2 1 2^1 ) = (x<<3) - (x << 1)
第二行31的二进制表示为11111,所以n=4,m=0
形式A:
x * k = (x<<4) + (x<<3) + (x<<2) + (x<<1) + x
形式B:
x * k = (x <<5 ) - x
这里面比较重要的一点是11111的第一个1的下标是4,最后一个1的下标是0,所以n=4,m=0
当确定了n,m之后就可以根据公式进行计算
第三行-6的二进制表示为-110(补码表示),所以n = 2,m = 1
形式A:
x * k = -((x << 2) + (x<<1))=-(x << 2) - (x << 1)
形式B:
x * k = -( (x<<3) - (x << 1)) = (x << 1) - (x << 3)
第四行55的二进制为110111,所以n=5,m=3
形式A:
x * k = (x * 1 * 2 5 2^5 ) + (x * 1 * 2 4 2^4 ) + (x * 1 * 2 2 2^2 ) + (x * 1 * 2 1 2^1 ) + (x * 1 * 2 0 2^0 ) = (x << 5) + (x << 4) + (x << 2) + (x << 1) + x
形式B:
x * k = (x * 2 6 2^6 ) - (x * 2 3 2^3 ) - (x * 2 0 2^0 ) = (x << 6) - (x <<3) - x

猜你喜欢

转载自blog.csdn.net/ciqingloveless/article/details/82844662
今日推荐