十進制轉其他進制
因為在java中位運算符是直接對數值的二進制數進行操作的 并且 寫的是二進制數在輸出和操作時是以十進制數的形式;
所以十進制轉二,八,十六進制;就已經實現了二進制,八進制,十進制,十六進制的相互轉換。
1)十進制轉其他進制&&其他進制的互相轉換:使用這三種方式
2)其他進制轉十進制:直接使用int、long即可
使用java API實現
十進制轉二進制:Integer.toBinaryString();
十進制轉八進制:Integer.toOctalString();
十進制轉十六進制:Integer.tohexString();
class BaseSystemDemo1 {public static void main(String[] args) {//十進制轉其他進制//1.使用java API實現//十進制轉二進制int num=80;String BinStr=Integer.toBinaryString(num);//十進制轉八進制String OctStr=Integer.toOctalString(num);//十進制轉十六進制String HexStr=Integer.toHexString(num);System.out.println(BinStr);//1010000System.out.println(OctStr);//120System.out.println(HexStr);//50}
}
使用除基倒取余法實現
十進制轉二進制
一個十進制數n,每次用n除以2,把余數記下來,再用商去除以2…依次循環,直到商為0結束,把余數倒著依次排列,就構成了轉換后的二進制數
代碼1:使用int類型
//十進制轉二進制//1.方法1:除基倒取余法//1_1:使用int類型/*一個十進制數n,每次用n除以2,把余數記下來,再用商去除以2...依次循環,直到商為0結束,把余數倒著依次排列,就構成了轉換后的二進制數*/int num=80;int r=0;//余數int t=0;//位數int bin=0;//最后的二進制數while(num!=0){r=num%2;num/=2;bin+=r*(int)(Math.pow(10,t));//每次求余后把余數存儲在int型數的低位,依次遞增t++;//位數加1}System.out.println(bin);//1010000
代碼2:使用String類型
//1_2:使用String類型int number=80;String strBin="";while(number!=0){// 0 0 ""// 00 0 0//...//1000 1 0000//number%2在strBin的前面,就是每次把新的余數放在字符串的首部,即實現了逆序余數strBin=number%2+strBin;number/=2;}System.out.println(strBin);//1010000
十進制轉八進制
代碼1:使用int類型
//十進制轉八進制//方法1:除基倒余法//1_1:使用int類型int num=80;int r=0;//余數int t=0;//位數int oct=0;//最后的八進制數while(num!=0){r=num%8;num/=8;oct+=r*(int)(Math.pow(10,t));t++;}System.out.println(oct);//120
代碼2:使用String類型
//1-2:使用String類型int num1=80;String str="";while(num1!=0){str=num1%8+str;num1/=8;}System.out.println(str);//120
十進制轉十六進制
因為十六進制是0-9,A-F,所以只能使用String存儲
代碼:
//十進制轉十六進制//方法1:除基倒余法//1:使用String類型int num2=842;String hexStr="";int n=0;while(num2!=0){n=num2%16; //注意加上"",防止進行數值運算hexStr=((n>9)?(char)(n-10+'A')+"":n+"")+hexStr;num2/=16;}System.out.println(hexStr);//34A
使用位運算符&(按位與)與>>(右移)實現
十進制轉二進制
n>>1 :無符號右移>>>,獲取n的二進制的下一位
n&1:按位與&,剛好能夠得到n的二進制的最低位;
再逐一輸出即可
假設一共32位,減1(最后的一位不需要移動,本身就有1位數在最低位,所以-1),再每次移動減少1位
代碼1:直接輸出
//方法2:位運算>>>與&//2_1:直接輸出int n=80;//從最高位開始移動,直到最低位for(int i = 31;i >= 0; i--){/*n>>1 :無符號右移>>>,獲取n的二進制的下一位n&1:按位與&,剛好能夠得到n的二進制的最低位再逐一輸出即可*/System.out.print(n >>> i & 1);//00000000000000000000000001010000}System.out.println();
代碼2:使用String類型
//2_2:使用StringString str="";int m=80;for(int i=31;i>=0;i--){str+=(m>>>i&1)+"";}System.out.println(str);//00000000000000000000000001010000
十進制轉八進制
假設一共32位,減2(最后的三位不需要移動,但每次移動3位,最后會需要補充1位數,所以只需要-2),再每次移動減少3位
代碼1:直接輸出
//方法2:使用位運算符>>與&//2-1:直接輸出int num2=80;//假設一共8位,減2(最后的三位不需要移動,但每次移動3位,最后會需要補充1位數,所以只需要-2),再每次移動減少3位//000 000 000for(int i=6;i>=0;i-=3){System.out.print((num2>>>i)&7);//120}System.out.println();//假設一共32位,減2(最后的三位不需要移動,但每次移動3位,最后會需要補充1位數,所以只需要-2),再每次移動減少3位for(int i=30;i>=0;i-=3){System.out.print((num2>>>i)&7);//00000000120}System.out.println();
代碼2:使用String類型
//2-2:使用String類型int num3=80;String octStr="";for(int i=30;i>=0;i-=3){octStr+=(num2>>>i)&7;}System.out.println(octStr);//00000000120
十進制轉十六進制的演化過程1
1.使用&15得到num的最后四位二進制數,每四位二進制數為1位十六進制數
2.因為輸出時,都是以十進制來輸出的,所以只需要把num3的十進制大于9的轉換為A-F;并且因為輸出的可能是數值也可能是字符,使用字符串類型
3.num3>>4獲得倒數第二個四位二進制數;并重復上述操作
4.連接字符串
代碼1
class BaseSystemDemo2 {public static void main(String[] args) {//十進制轉其他進制//2.使用位運算符&(按位與)與>>(右移)實現//原理:位運算符是直接對數值的二進制形式進行操作的//n&1 n&7 n&15:按位與&,剛好能夠得到n的二進制的最后的位數//n>>1 n>>3 n>>4:右移>>,獲取n的二進制的下一段//十進制轉十六進制//1)使用&15得到num的最后四位二進制數,每四位二進制數為1位十六進制數int num=80;int num3=num&15;//2)因為輸出時,都是以十進制來輸出的,所以只需要把num3的十進制大于9的轉換為A-F//因為輸出的可能是數值也可能是字符,使用字符串類型String HexStr1=(num3>9)?(char)(num3-10+'A')+"":num3+"";//3)num3>>4獲得倒數第二個四位二進制數int num4=(num>>4)&15;String HexStr2=(num4>9)?(char)(num4-10+'A')+"":num4+"";//4)連接兩個字符串String HexStr=HexStr2+HexStr1;System.out.println(HexStr);//50}
}
十進制轉十六進制的演化過程2
假設一共32位,減4(最后的四位不需要移動,所以-4),再每次移動4位
使用三元運算符輸出其中大于9的字符:(n1>9)?(char)(n1-10+‘A’)+"":n1+""
代碼1:直接輸出
//方法2:使用位運算符>>>和&//2-1:直接輸出int num3=842;int n1=0;//假設一共8位,減4(最后的四位不需要移動,所以-4),再每次移動4位for(int i=4;i>=0;i-=4){n1=(num3>>>i)&15;System.out.print((n1>9)?(char)(n1-10+'A')+"":n1+"");//4A}System.out.println();//假設一共32位,減4(最后的四位不需要移動,所以-4),再每次移動4位int n2=0;for(int i=28;i>=0;i-=4){n2=(num3>>>i)&15;System.out.print((n2>9)?(char)(n2-10+'A')+"":n2+"");//0000034A }System.out.println();
代碼2:使用String
//2-2:使用String類型int num4=842;String hexStr1="";int n3=0;for(int i=28;i>=0;i-=4){n3=(num4>>>i)&15;hexStr1+=(n3>9)?(char)(n3-10+'A')+"":n3+"";}System.out.println(hexStr1);//0000034A