1. 程式人生 > >取數字的最低四位 進位制轉換

取數字的最低四位 進位制轉換

用數字 & 15得最低四位

>> 有符號右移  開頭是1補1 是0補0

>>>無符號右移 開頭補0

輸出數字對應的十六進位制元素:

普通方法:System.out.print((char)(num-10+"A")); //輸出數字的十六進位制表現形0~9,A~F 

查表法:將所有元素臨時儲存起來,建立對應關係,每次 & 15後的值作為索引去查表,可以找到對應的元素。

char[]  chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'} ;
十進位制轉二進位制
	public static void toBin(int num)
	{
		//定義二進位制的表。
		char[] chs = {'0','1'};

		//定義一個臨時儲存容器。
		char[] arr = new char[32];

		//定義一個運算元組的指標
		int pos = arr.length;

		while(num!=0)
		{
			int temp = num & 1;

			arr[--pos] = chs[temp];

			num = num >>> 1;
		}

		for(int x=pos; x<arr.length; x++)
		{
			System.out.print(arr[x]);
		}
	}
十進位制轉十六進位制
	public static void toHex(int num)
	{
		char[] chs = {'0','1','2','3'   //十六進位制表
			      ,'4','5','6','7'
			      ,'8','9','A','B'
			      ,'C','D','E','F'};
		
		//定義一個臨時容器。
		char[] arr = new char[8];
		int pos = arr.length;

		while(num!=0)
		{
			int temp = num & 15;
			arr[--pos] = chs[temp]; //反過來賦值,使結果為正確的順序
			num = num >>> 4;
		}
		//儲存資料的arr陣列遍歷。
		for(int x=pos;x<arr.length; x++)
		{
			System.out.print(arr[x]+",");
		}

	}
將共通地方做成一個函式
	/*
	十進位制-->二進位制
	*/
	public static void toBin(int num)
	{
		trans(num,1,1);
	}

	/*
	十進位制-->八進位制
	*/
	public static void toBa(int num)
	{
		trans(num,7,3);
	}
	/*
	十進位制-->十六進位制
	*/
	public static void toHex(int num)
	{
		trans(num,15,4);
	}

	public static void trans(int num,int base,int offset)
	{

		if(num==0)
		{
			System.out.println(0);
			return ;
		}
		char[] chs = {'0','1','2','3'
					,'4','5','6','7'
					,'8','9','A','B'
					,'C','D','E','F'};
		char[] arr = new char[32];

		int pos = arr.length;

		while(num!=0)
		{
			int temp = num & base;
			arr[--pos] = chs[temp];
			num = num >>> offset;
		}

		for(int x=pos; x<arr.length; x++)
		{
			System.out.print(arr[x]);
		}

		return ;
	}