1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java位运算实现除法_位运算-实现加减乘除

java位运算实现除法_位运算-实现加减乘除

时间:2019-11-27 16:16:42

相关推荐

java位运算实现除法_位运算-实现加减乘除

基本性质:1:~n=-(n+1),比如:~3=-4

2:获取整数n的二进制串中最后一个1:-n&n=~(n-1)&n

3:去掉整数n的二进制串中最后一个1:n&(n-1)

加法:(以下所有代码都是Java实现)

public static int add(int a,int b) {

int res=a;

int xor=a^b; // a^b得到原位和(相当于按位相加没有进位)

int forward=(a&b)<<1;//得到进位和 a&b:得到产生进位的地方 (a&b)<<1:进位后的值

if(forward!=0){//若进位和不为0,则递归求原位和+进位和

res=add(xor, forward);

}else{

res=xor;//若进位和为0,则此时原位和为所求和

}

return res;

}

减法:

public static int minus(int a,int b) {

int B=~(b-1); // 由上面基本性质 -b=+(-b),~(b-1)=-b ===>>> a-b=a+(-b)=a+(~(b-1)

return add(a, B);

}

乘法:

public static int multi(int a,int b){

/* 1011

* 1010

--------

10110 (1011<<1,相当于乘以0010)

1011000 (1011<<3,相当于乘以1000)

--------

1101110

*/

int i=0;

int res=0;

while(b!=0){//乘数为0则结束

//处理乘数当前位

if((b&1)==1){

res+=(a<

b=b>>1;

++i;//i记录当前位是第几位

}else{

b=b>>1;

++i;

}

}

return res;

}

除法:

public static int sub(int a,int b) {

// 除法的意义就在于:求a可以由多少个b组成。那么由此我们可得除法的实现:求a能减去多少个b,做减法的次数就是除法的商。

int res=-1;

if(a

return 0;

}else{

res=sub(minus(a, b), b)+1;

}

return res;

}

测试代码:

public static void main(String args[]){

System.out.println("加法测试:"+add(10, 5));

System.out.println("减法测试:"+minus(10, 5));

System.out.println("乘法测试:"+multi(10, 5));

System.out.println("除法测试:"+sub(10, 5));

}

测试结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。