Java中輸入一個十進位制數,如何轉換為二進位制數
阿新 • • 發佈:2019-01-09
方法一:利用Java API直接轉換
十進位制數如何轉換為二進位制數,這在Java API 中有一個方法,Integer.toBinaryString( ) 括號裡面寫上你要轉換的十進位制數,這樣可以直接轉換。例如:
public static void main(String[] args) {
十進位制轉換為二進位制
System.out.println(Integer.toBinaryString(10));
}
方法二:通過求餘,求商,並計算值(例如:把二進位制的1010 直接輸成十進位制的1010)實現.
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 123;//定義一個變數並賦給他一個十進位制的值
int remainder;//定義一個變數用於儲存餘數
int sum = 0;//定義一個變數用於存放和
int k = 1;//定義一個變數控制位數
while(a != 0){
remainder = a % 2;//對目標數字求餘
a /= 2;//對目標數字求商
sum = sum + remainder * k;//求和
k *= 10;//改變位數
}
System.out.println("10進位制的123轉換為2進位制結果為:" + sum );
}
但是這種方法存在一個問題:因為int型別是有取值範圍的,如果轉換的二進位制數字超出了範圍(例如:10011100110110)這個數字明顯超出了int的取值範圍,這樣我們用int型別的sum進行儲存的時候他就會自動轉換為一個其他的數字。並且這個方法沒有辦法求負數的二進位制數。
方法三:在方法二的基礎上使用字串對結果集進行儲存
public static void main(String[] args) {
int n = -10;
String result = "";
boolean minus = false;
//如果該數字為負數,那麼進行該負數+1之後的絕對值的二進位制碼的對應位取反,然後將它儲存在result結果中
if(n < 0){
minus = true;
n = Math.abs(n + 1);
}
while(true){
int remainder = (!minus && n % 2 == 0) || (minus && n % 2 == 1) ? 0 : 1;
//將餘數儲存在結果中
result = remainder + result;
n /= 2;
if(n == 0){
break;
}
}
//判斷是否為負數,如果是負數,那麼前面所有位補1
if(minus){
n = result.length();
for(int i = 1; i <= 32 - n; i++){
result = 1 + result;
}
}
System.out.println(result);
}
用這種方法就能很好解決int型別的越界問題,能解決所有的十進位制轉換二進位制的問題。