java实现二进制的加法
先看打印結果在看代碼比較好理解。結果在最下面的位置。
總結:講解了二進制的按位異域、按位與、左移的運算規則。并通過次3種算法得到2個數相加的結果。二進制應該還有其他算法,由于知識淺薄就不知道了。
代碼:
public static void main(String[] args){
int a=11,b=9;//初始化要執行加法的值
System.out.println("===開始二進制運算===");
add(a,b);
System.out.println("===二進制運算結束===");
}
/**
* 將二進制的數據打印出來
* @param binars 需要打印的二進制值
* @param paramName 需要打印的參數名稱
* @return 返回打印的字符串
*/
public static String printBnary(StringBuilder binars,int param){
StringBuilder binarsRe=new StringBuilder();
String[] strs=binars.toString().split(",");
int strLength=strs.length;
while (strLength>=1){
binarsRe.append(strs[strLength-1]+" ");
strLength--;
}
return binarsRe.toString();
}
/**
* 十進制轉換為二進制輸出
* @param a 要轉換的十進制數
* @param binars 接收轉換后的二進制數據
* @param paramName 需要打印的參數名稱
* @return
*/
public static String DecimalTransBinary(int a,StringBuilder binars,int param){
int rem=a%2;//取余數
int base=a/2;//取基數
/**
* 物流是余數和基數都必須除盡為0
*/
if(base>0 || rem>0){
//將所有的余數都添加到字符串中使用,隔開在打印是使用
binars.append(rem+",");
DecimalTransBinary(base,binars,param);
}
//十進制轉換二進制成功后,將二進制數據打印出來
return printBnary(binars,param);
}
/**
* 十進制加法,解釋如何使用二進制實現的
* @param a 執行加法的參數
* @param b 執行加法的參數
* @return 返回加法成功后的整數
*/
public static int add(int a,int b){
//對需要相加的數據輸出為二進制
StringBuilder binars=new StringBuilder();
String aStr=DecimalTransBinary(a,binars,a);
//將stringBuilder數據輸出到控制臺
binars.setLength(0);
String bStr=DecimalTransBinary(b,binars,b);
int res=a;
//按為異域的二進制運算
int xor=a^b;
System.out.println("");
System.out.println("按位異域(^):二進制數據的相同位不同則為1,相同則為0。");
System.out.println(a+"的二進制值:"+aStr);
System.out.println(b+"的二進制值:"+bStr);
System.out.println("參數:"+a+" 參數:"+b+" 進行"+a+"^"+b+":");
binars.setLength(0);
String xorStr=DecimalTransBinary(xor,binars,xor);
System.out.println(aStr+"^"+bStr+"="+xorStr);
System.out.println("按位異域后得到的二進制值:"+xorStr);
System.out.println("按位異域后得到的十進制值:"+xor);
//按位與的二進制運算和左移一位的值
int forward=(a&b)<<1;
System.out.println();
System.out.println("按位與(&):二進制數據的相同位都為1則為1,若有一個不為1則為0。");
System.out.println("左移(<<):二進制數據左移b為(在后面添加b個0)。例如:11<<1。11的二進制為1011,左移1為就是10110;");
System.out.println("10110轉換為十進制就是:22。左移用十進制解釋就是,11乘以2的1次方的結果。11<<2就是11乘以2的次方的結果。");
System.out.println("參數:"+a+" 參數:"+b+" 進行("+a+"&"+b+")<<1:");
binars.setLength(0);
String forwardStr=DecimalTransBinary(forward,binars,forward);
System.out.println("("+aStr+"&"+bStr+")<<1="+forwardStr);
System.out.println("按位與后得到的二進制值:"+forwardStr);
System.out.println("按位與后得到的十進制值:"+forward);
System.out.println();
if(forward!=0){
System.out.print("("+a+"&"+b+")<<1="+forward+"運算結果不為0,");
System.out.println("將"+a+"^"+b+"運算的結果值:"+xor+";("+a+"&"+b+")<<1運算的結果值:"+forward+"。繼續重復以上運算。");
res=add(xor,forward);
}else{
System.out.println("("+a+"&"+b+")<<1="+forward+"運算結果為0;"+a+"^"+b+"按位異域的運算結果就是最終的和:"+xor);
res=xor;
}
return res;
}
結果:
===開始二進制運算===
按位異域(^):二進制數據的相同位不同則為1,相同則為0。
11的二進制值:1 0 1 1
9的二進制值:1 0 0 1
參數:11 參數:9 進行11^9:
1 0 1 1 ^1 0 0 1 =1 0
按位異域后得到的二進制值:1 0
按位異域后得到的十進制值:2
按位與(&):二進制數據的相同位都為1則為1,若有一個不為1則為0。
左移(<<):二進制數據左移b為(在后面添加b個0)。例如:11<<1。11的二進制為1011,左移1為就是10110;
10110轉換為十進制就是:22。左移用十進制解釋就是,11乘以2的1次方的結果。11<<2就是11乘以2的次方的結果。
參數:11 參數:9 進行(11&9)<<1:
(1 0 1 1 &1 0 0 1 )<<1=1 0 0 1 0
按位與后得到的二進制值:1 0 0 1 0
按位與后得到的十進制值:18
(11&9)<<1=18運算結果不為0,將11^9運算的結果值:2;(11&9)<<1運算的結果值:18。繼續重復以上運算。
按位異域(^):二進制數據的相同位不同則為1,相同則為0。
2的二進制值:1 0
18的二進制值:1 0 0 1 0
參數:2 參數:18 進行2^18:
1 0 ^1 0 0 1 0 =1 0 0 0 0
按位異域后得到的二進制值:1 0 0 0 0
按位異域后得到的十進制值:16
按位與(&):二進制數據的相同位都為1則為1,若有一個不為1則為0。
左移(<<):二進制數據左移b為(在后面添加b個0)。例如:11<<1。11的二進制為1011,左移1為就是10110;
10110轉換為十進制就是:22。左移用十進制解釋就是,11乘以2的1次方的結果。11<<2就是11乘以2的次方的結果。
參數:2 參數:18 進行(2&18)<<1:
(1 0 &1 0 0 1 0 )<<1=1 0 0
按位與后得到的二進制值:1 0 0
按位與后得到的十進制值:4
(2&18)<<1=4運算結果不為0,將2^18運算的結果值:16;(2&18)<<1運算的結果值:4。繼續重復以上運算。
按位異域(^):二進制數據的相同位不同則為1,相同則為0。
16的二進制值:1 0 0 0 0
4的二進制值:1 0 0
參數:16 參數:4 進行16^4:
1 0 0 0 0 ^1 0 0 =1 0 1 0 0
按位異域后得到的二進制值:1 0 1 0 0
按位異域后得到的十進制值:20
按位與(&):二進制數據的相同位都為1則為1,若有一個不為1則為0。
左移(<<):二進制數據左移b為(在后面添加b個0)。例如:11<<1。11的二進制為1011,左移1為就是10110;
10110轉換為十進制就是:22。左移用十進制解釋就是,11乘以2的1次方的結果。11<<2就是11乘以2的次方的結果。
參數:16 參數:4 進行(16&4)<<1:
(1 0 0 0 0 &1 0 0 )<<1=
按位與后得到的二進制值:
按位與后得到的十進制值:0
(16&4)<<1=0運算結果為0;16^4按位異域的運算結果就是最終的和:20
===二進制運算結束===
總結
以上是生活随笔為你收集整理的java实现二进制的加法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝牙协议服务与特征值
- 下一篇: flash cs5如何制作旋转的三维立体