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 * (
-
) = (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 *
) + (x * 1 *
) + (x * 1 *
) + (x * 1 *
) + (x * 1 *
) = (x << 5) + (x << 4) + (x << 2) + (x << 1) + x
形式B:
x * k = (x *
) - (x *
) - (x *
) = (x << 6) - (x <<3) - x