1. 程式人生 > >JAVA的進位制間的轉換方法

JAVA的進位制間的轉換方法

進位制:又名進位制,是人們規定的一種進位方法。比如二進位制就是逢二進一;

位(bit):就是代表二進位制資料箇中的每一個0或1,bit是計算機中的最小單位。計算機基本儲存單位是位元組(byte),包含8個二進位制位,即1 byte = 8 bit。以下是整數資料型別所佔用的記憶體空間:

 --->整數預設為int型別


Java針對整數常量提供了4種進製表現形式:

二進位制:由0,1組成,以0b開頭。

八進位制:由0,1,…7組成,以0開頭。

十進位制:由0,1,…9組成,整數預設是十進位制的。

十六進位制:由0,1,…9,a,b,…f,大小寫均可,以0x開頭。

注:任何資料在計算機中都是以二進位制

的形式存在的。二進位制早期由電訊號開關演變而來,其中0和1在計算機中由高電頻和低電頻表示,即通電和斷電。

如果生成值為60的int型別的資料,他在記憶體中會佔用32位(bit)的記憶體空間,如下:

0000-0000 0000-0000 0000-0000 0011-1100(二進位制)

   0       0       0       0       0        0       3      C    (十六進位制)

00 00-0 000 000 0-00 00 0 000-000 0 00 11-1 100(二進位制)

 0    0      0     0      0      0     0      0     0      7      4  (八進位制)

實現進位制間轉換有三種方法:


方法一:數學公式計算實現

將十進位制數除以轉換進位制數(2/8/16),直到商為零停止,最後將餘數從下到上排列起來。即實現了十進位制到其它進位制的轉變。相反,實現其它進位制到十進位制的轉變只需要將:其它進位制數從左到右依次乘以該進位制數位置的次冪,之後相加即可:比如二進位制數111100轉化為十進位制數60 --> 1*2^5 + 1*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = 60。

程式碼實現如下:

/*
    將10進位制轉化為二進位制或八進位制
    由於使用的是餘數乘以10的位數次方的方法來輸出相應的進位制數,因此指適用於10進位制以內的轉換
*/
import java.lang.Math;
public class Excerise {
    private int t = 0;  //用來記錄位數
    private int bin = 0; //用來記錄最後的二/八進位制數
    private int r = 0;  //用來儲存餘數
    public Excerise(){}  //定義空的構造方法
    /*
        將十進位制轉為二進位制或八進位制;
        n為10進位制數,m是將要轉化的目標進位制數
     */
    public void transform(int m,int n){
        assert m == 2 || m == 10 || m == 8;
        while(n != 0){
            r = n % m;                   //取餘
            n = n / m;                   //取商
            bin += r * Math.pow(10,t);   //Math.pow(10,t)表示10的t次方
            t++;
        }
        System.out.println(bin);
    }
    public static void main(String[] args){
        Excerise trans = new Excerise();
        trans.transform(8,60);           //將60轉化為八進位制數
    }
}

方法二:利用“移位”操作實現

這裡有關於移位操作的詳細程式碼https://www.cnblogs.com/challengingtime/p/4688809.html

 

方法三:呼叫JAVA的API

java中有封裝好的Integer類,用於進位制之間的相互轉換:

Integer.toBinaryString(n):十進位制n轉2進位制;

Integer.toOctalString(n):十進位制n轉8進位制;

Integer.toHexString(n):十進位制n轉16進位制;

Integer.toString(n, r):十進位制n轉r進位制;

注:上述方法的返回值都是字串

Integer.parseInt((String) s,(int) radix):將radix進位制的字串s轉為10進位制。

public class Excerise02 {
    public static void main(String args[]){
        int n = 60;
        System.out.println(n + "的二進位制是:" + Integer.toBinaryString(n));
        System.out.println(n + "的八進位制是:" + Integer.toOctalString(n));
        System.out.println(n + "的十六進位制是:" + Integer.toHexString(n));
        System.out.println(n + "的三進位制是:" + Integer.toString(n, 3));
        String s = "111100";
        System.out.println(s + "的十進位制是:" + Integer.parseInt(s, 2));
    }
}
-------------------------------------------------------------------
60的二進位制是:111100
60的八進位制是:74
60的十六進位制是:3c
60的三進位制是:2020
111100的十進位制是:60