//通过位运算实现两个数的加、减、乘、除
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));
}
}
领取专属 10元无门槛券
私享最新 技术干货