首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过位运算实现两个数的加、减、乘、除-JAVA成长之路

//通过位运算实现两个数的加、减、乘、除

publicclassBitSuan{

//(1)加法运算

publicstaticintadd(inta,intb)

{

 intsum=a;

 while(b!=)

 {

 //a与b无进位相加

sum=a^b;

b=(a&b)

a=sum;

 }

 returnsum;

}

//负数按位置取反+1

publicstaticintnegNum(intn)

{

 returnadd(~n,1);

}

//(2)减法运算

publicstaticintminus(inta,intb)

{

returnadd(a,negNum(b));

}

//(3)乘法运算

publicstaticintmulti(inta,intb){

intres =;

while(b !=) {

if((b &1) !=) {

res = add(res, a);

}

a

b >>>=1;

}

returnres;

}

//判断是否是负数

publicstaticbooleanisNeg(intn){

returnn

}

publicstaticintdiv(inta,intb){

intx = isNeg(a) ? negNum(a) : a;

inty = isNeg(b) ? negNum(b) : b;

intres =;

for(inti =31; i > -1; i = minus(i,1)) {

if((x >> i) >= y) {

res |= (1

x = minus(x, y

}

}

returnisNeg(a) ^ isNeg(b) ? negNum(res) : res;

}

//(4)除法运算

publicstaticintdivide(inta,intb){

if(b ==) {

thrownewRuntimeException("divisor is 0");

}

if(a == Integer.MIN_VALUE && b == Integer.MIN_VALUE) {

return1;

}elseif(b == Integer.MIN_VALUE) {

return;

}elseif(a == Integer.MIN_VALUE) {

intres = div(add(a,1), b);

returnadd(res, div(minus(a, multi(res, b)), b));

}else{

returndiv(a, b);

}

}

publicstaticvoidmain(String[]args)

{

inta=10;

intb=5;

System.out.println(add(a,b));

System.out.println(minus(a,b));

System.out.println(multi(a,b));

System.out.println(divide(a,b));

}

}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201110A01XUO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券