java位乘_Java的按位乘法和加法

小编典典

让我们开始看乘法代码。这个想法实际上很聪明。假设您有以二进制形式编写的n 1和n 2。然后,您可以将n1视为两个幂的和:n2 = c 30 2 30 +

c 29 2 29 + … + c 1 2 1 + c 0 2 0,其中每个c i为0或1。那么您可以将乘积n 1 n 2视为

n 1 n 2 =

n 1(c 30 2 30 + c 29 2 29 + … + c 1 2 1 + c 0 2 0)=

n 1 c 30 2 30 + n 1 c 29 2 29 + … + n 1 c 1 2 1 + n 1 c 0 2 0

这有点密集,但是我们的想法是,两个数字的乘积由第一个数字乘以组成第二个数字的两个数字的乘方乘以第二个数字的二进制数字的值得出。

现在的问题是,我们是否可以在不进行任何实际乘法的情况下计算该和项。为了做到这一点,我们将需要能够读取n

2的二进制数字。幸运的是,我们可以使用班次进行操作。特别地,假设我们从n 2开始,然后只看最后一位。那是c 0。如果然后将值下移一个位置,则最后一位是c

0,依此类推。更一般而言,将n 2的值下移i个位置后,最低位将是c

i。要读取最后一位,我们可以对值与数字1进行按位与运算。它具有二进制表示形式,除最后一位数字外,其他所有位置均为零。由于任何n的0 AND n =

0,因此将清除所有最高位。此外,由于0 AND 1 = 0和1 AND 1 = 1,因此此操作将保留数字的最后一位。

好的-我们现在知道我们可以读取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值