java 减法 位运算,位运算-实现加减乘除
基本性質(zhì):1:~n=-(n+1),比如:~3=-4
2:獲取整數(shù)n的二進(jìn)制串中最后一個(gè)1:-n&n=~(n-1)&n
3:去掉整數(shù)n的二進(jìn)制串中最后一個(gè)1:n&(n-1)
加法:(以下所有代碼都是Java實(shí)現(xiàn))
public static int add(int a,int b) {
int res=a;
int xor=a^b; // a^b得到原位和(相當(dāng)于按位相加沒有進(jìn)位)
int forward=(a&b)<<1;//得到進(jìn)位和 a&b:得到產(chǎn)生進(jìn)位的地方 (a&b)<<1:進(jìn)位后的值
if(forward!=0){//若進(jìn)位和不為0,則遞歸求原位和+進(jìn)位和
res=add(xor, forward);
}else{
res=xor;//若進(jìn)位和為0,則此時(shí)原位和為所求和
}
return res;
}
減法:
public static int minus(int a,int b) {
int B=~(b-1); // 由上面基本性質(zhì) -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,相當(dāng)于乘以0010)
1011000 (1011<<3,相當(dāng)于乘以1000)
--------
1101110
*/
int i=0;
int res=0;
while(b!=0){//乘數(shù)為0則結(jié)束
//處理乘數(shù)當(dāng)前位
if((b&1)==1){
res+=(a<
b=b>>1;
++i;//i記錄當(dāng)前位是第幾位
}else{
b=b>>1;
++i;
}
}
return res;
}
除法:
public static int sub(int a,int b) {
// 除法的意義就在于:求a可以由多少個(gè)b組成。那么由此我們可得除法的實(shí)現(xiàn):求a能減去多少個(gè)b,做減法的次數(shù)就是除法的商。
int res=-1;
if(a
return 0;
}else{
res=sub(minus(a, b), b)+1;
}
return res;
}
測(cè)試代碼:
public static void main(String args[]){
System.out.println("加法測(cè)試:"+add(10, 5));
System.out.println("減法測(cè)試:"+minus(10, 5));
System.out.println("乘法測(cè)試:"+multi(10, 5));
System.out.println("除法測(cè)試:"+sub(10, 5));
}
測(cè)試結(jié)果:
作者:|舊市拾荒|
總結(jié)
以上是生活随笔為你收集整理的java 减法 位运算,位运算-实现加减乘除的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 资深科技评论员:内存颗粒叠加的性能表现分
- 下一篇: 如何超频ddr4内存,让你的电脑燃爆