如何用程序自動打印Int類型十進制負數的二進制碼?

首先,通過數學原理,我們可以輕易用程序打印正數的二進制碼,方法比較簡單,舉例如下:

方法一:for循環

public static void toBinary(int a ){
int b = 0;//定義餘數賦值爲0
String result = "";
for(;;){
b = a % 2;//求餘
result = b + result;
a /= 2;
if(a == 0){
System.out.println(result);
break;
}
}
}

方法2:遞歸

public static void toBinary(int a){
if(a == 0){
return;
}else{
toBinary(a/2);
System.out.print(a%2);
}
}

其次,我們也可以打印一個Int類型的正數取反後的二進制代碼,方法如下:

int a ;
int i = 0;
String result = "";
int b = 0;
for(;;){
b = a % 2;
b = b == 0 ? 1 : 0;//取反
result = b + result;//按次排列
i++;
a /= 2;
if(a == 0){
break;
}
}
int j;
for(j=0;j<(32-i);j++){  //高位補全,正數時補0,負數時補1
result = "0" + result;
System.out.println(result);
}

然後,重點來了!我們可以通過 正數的取反來求負數的二進制碼打印。原理如下:

負數的二進制碼 = 相應正數的二進制反碼 + 1
可得負數的二進制碼 - 1 = 相應正數的二進制反碼
假如負數是-A,相應的二進制碼是 erjinzhi(-A),對應正數是A,相應的二進制反碼是~A,則 erjinzhi(-A) - 1 = ~A
又因一個數的二進制碼 - 1 跟這個數先-1 再求二進制碼效果是相同的,即erjinzhi(-A) - 1 =  erjinzhi(-A - 1)= erjinzhi(-(A+1))
可得erjinzhi(-(A+1))= ~A
即:erjinzhi(-A) = ~(A-1)或erjinzhi(A) = ~(-A-1)

例如,要求-34的二進制代碼,只要算出~33對應的二進制代碼即可,具體計算方法見上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章