算法:只用位操作实现+、-、*、/、幂次运算

本文介绍了如何仅使用位操作来实现加法、乘法、除法和幂次运算,通过将数字转换为二进制并利用位运算的特性,实现了算法的高效计算。加法和乘法利用异或和与操作,除法通过逐位减法,幂次运算则结合移位和乘法策略,所有方法的时间复杂度都在O(n)内。
摘要由CSDN通过智能技术生成

最近零星看到一些位操作的算法题,看题目都有类似的套路,不用常规算术运算,只用位操作和判断,实现+、-、*、/和幂次操作。之前都是看到了就做一做,今天写这篇文章对此种类型的算法题做统一整理。

加法

不用+号做加法?首先回顾一下我们小学时候学的加法运算是怎么做的。从低位到高位,逐位做加法,得到进位,循环下一位。对这道题我们也可以用同样的方法来实现加法。怎么做呢?我们可以把两个数字都表示为二进制数,然后分别对二进制数用小学的加法运算逐位计算和与进位,从低位到高位循环,得到最终结果。对二进制数来说,当前bit位的和的计算可以表示为:0 + 0 = 0,0 + 1 = 1,1 + 0 = 1,1 + 1 = 2,这不就是XOR操作嘛!下一位bit位的进位,只有当当前两个bit位和进位中有两个1时,下一位的进位才为1,所以可以用与操作实现:(bit1 & bit2) | (bit1 & carry) | (bit2 & carry)。这样一来,当前bit位的值和下一位的进位计算方法我们都有了,由低位到高位逐位计算即可得到无+号的加法算法:

public static long add(long a, long b){
    long sum = 0, carryin = 0, tempA = 0, tempB = 0, k = 1;
    while(tempA != 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值