日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 进制转换 十进制转二,八,十六进制

發(fā)布時(shí)間:2023/12/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 进制转换 十进制转二,八,十六进制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

十進(jìn)制轉(zhuǎn)其他進(jìn)制

因?yàn)樵趈ava中位運(yùn)算符是直接對數(shù)值的二進(jìn)制數(shù)進(jìn)行操作的 并且 寫的是二進(jìn)制數(shù)在輸出和操作時(shí)是以十進(jìn)制數(shù)的形式;
所以十進(jìn)制轉(zhuǎn)二,八,十六進(jìn)制;就已經(jīng)實(shí)現(xiàn)了二進(jìn)制,八進(jìn)制,十進(jìn)制,十六進(jìn)制的相互轉(zhuǎn)換。

1)十進(jìn)制轉(zhuǎn)其他進(jìn)制&&其他進(jìn)制的互相轉(zhuǎn)換:使用這三種方式
2)其他進(jìn)制轉(zhuǎn)十進(jìn)制:直接使用int、long即可

使用java API實(shí)現(xiàn)

十進(jìn)制轉(zhuǎn)二進(jìn)制:Integer.toBinaryString();
十進(jìn)制轉(zhuǎn)八進(jìn)制:Integer.toOctalString();
十進(jìn)制轉(zhuǎn)十六進(jìn)制:Integer.tohexString();

class BaseSystemDemo1 {public static void main(String[] args) {//十進(jìn)制轉(zhuǎn)其他進(jìn)制//1.使用java API實(shí)現(xiàn)//十進(jìn)制轉(zhuǎn)二進(jìn)制int num=80;String BinStr=Integer.toBinaryString(num);//十進(jìn)制轉(zhuǎn)八進(jìn)制String OctStr=Integer.toOctalString(num);//十進(jìn)制轉(zhuǎn)十六進(jìn)制String HexStr=Integer.toHexString(num);System.out.println(BinStr);//1010000System.out.println(OctStr);//120System.out.println(HexStr);//50} }

使用除基倒取余法實(shí)現(xiàn)

十進(jìn)制轉(zhuǎn)二進(jìn)制

一個(gè)十進(jìn)制數(shù)n,每次用n除以2,把余數(shù)記下來,再用商去除以2…依次循環(huán),直到商為0結(jié)束,把余數(shù)倒著依次排列,就構(gòu)成了轉(zhuǎn)換后的二進(jìn)制數(shù)

代碼1:使用int類型

//十進(jìn)制轉(zhuǎn)二進(jìn)制//1.方法1:除基倒取余法//1_1:使用int類型/*一個(gè)十進(jìn)制數(shù)n,每次用n除以2,把余數(shù)記下來,再用商去除以2...依次循環(huán),直到商為0結(jié)束,把余數(shù)倒著依次排列,就構(gòu)成了轉(zhuǎn)換后的二進(jìn)制數(shù)*/int num=80;int r=0;//余數(shù)int t=0;//位數(shù)int bin=0;//最后的二進(jìn)制數(shù)while(num!=0){r=num%2;num/=2;bin+=r*(int)(Math.pow(10,t));//每次求余后把余數(shù)存儲在int型數(shù)的低位,依次遞增t++;//位數(shù)加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的前面,就是每次把新的余數(shù)放在字符串的首部,即實(shí)現(xiàn)了逆序余數(shù)strBin=number%2+strBin;number/=2;}System.out.println(strBin);//1010000

十進(jìn)制轉(zhuǎn)八進(jìn)制

代碼1:使用int類型

//十進(jìn)制轉(zhuǎn)八進(jìn)制//方法1:除基倒余法//1_1:使用int類型int num=80;int r=0;//余數(shù)int t=0;//位數(shù)int oct=0;//最后的八進(jìn)制數(shù)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

十進(jìn)制轉(zhuǎn)十六進(jìn)制

因?yàn)槭M(jìn)制是0-9,A-F,所以只能使用String存儲
代碼:

//十進(jìn)制轉(zhuǎn)十六進(jìn)制//方法1:除基倒余法//1:使用String類型int num2=842;String hexStr="";int n=0;while(num2!=0){n=num2%16; //注意加上"",防止進(jìn)行數(shù)值運(yùn)算hexStr=((n>9)?(char)(n-10+'A')+"":n+"")+hexStr;num2/=16;}System.out.println(hexStr);//34A

使用位運(yùn)算符&(按位與)與>>(右移)實(shí)現(xiàn)

十進(jìn)制轉(zhuǎn)二進(jìn)制

n>>1 :無符號右移>>>,獲取n的二進(jìn)制的下一位
n&1:按位與&,剛好能夠得到n的二進(jìn)制的最低位;
再逐一輸出即可
假設(shè)一共32位,減1(最后的一位不需要移動,本身就有1位數(shù)在最低位,所以-1),再每次移動減少1位

代碼1:直接輸出

//方法2:位運(yùn)算>>>與&//2_1:直接輸出int n=80;//從最高位開始移動,直到最低位for(int i = 31;i >= 0; i--){/*n>>1 :無符號右移>>>,獲取n的二進(jìn)制的下一位n&1:按位與&,剛好能夠得到n的二進(jì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

十進(jìn)制轉(zhuǎn)八進(jìn)制

假設(shè)一共32位,減2(最后的三位不需要移動,但每次移動3位,最后會需要補(bǔ)充1位數(shù),所以只需要-2),再每次移動減少3位

代碼1:直接輸出

//方法2:使用位運(yùn)算符>>與&//2-1:直接輸出int num2=80;//假設(shè)一共8位,減2(最后的三位不需要移動,但每次移動3位,最后會需要補(bǔ)充1位數(shù),所以只需要-2),再每次移動減少3位//000 000 000for(int i=6;i>=0;i-=3){System.out.print((num2>>>i)&7);//120}System.out.println();//假設(shè)一共32位,減2(最后的三位不需要移動,但每次移動3位,最后會需要補(bǔ)充1位數(shù),所以只需要-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

十進(jìn)制轉(zhuǎn)十六進(jìn)制的演化過程1

1.使用&15得到num的最后四位二進(jìn)制數(shù),每四位二進(jìn)制數(shù)為1位十六進(jìn)制數(shù)
2.因?yàn)檩敵鰰r(shí),都是以十進(jìn)制來輸出的,所以只需要把num3的十進(jìn)制大于9的轉(zhuǎn)換為A-F;并且因?yàn)檩敵龅目赡苁菙?shù)值也可能是字符,使用字符串類型
3.num3>>4獲得倒數(shù)第二個(gè)四位二進(jìn)制數(shù);并重復(fù)上述操作
4.連接字符串

代碼1

class BaseSystemDemo2 {public static void main(String[] args) {//十進(jìn)制轉(zhuǎn)其他進(jìn)制//2.使用位運(yùn)算符&(按位與)與>>(右移)實(shí)現(xiàn)//原理:位運(yùn)算符是直接對數(shù)值的二進(jìn)制形式進(jìn)行操作的//n&1 n&7 n&15:按位與&,剛好能夠得到n的二進(jìn)制的最后的位數(shù)//n>>1 n>>3 n>>4:右移>>,獲取n的二進(jìn)制的下一段//十進(jìn)制轉(zhuǎn)十六進(jìn)制//1)使用&15得到num的最后四位二進(jìn)制數(shù),每四位二進(jìn)制數(shù)為1位十六進(jìn)制數(shù)int num=80;int num3=num&15;//2)因?yàn)檩敵鰰r(shí),都是以十進(jìn)制來輸出的,所以只需要把num3的十進(jìn)制大于9的轉(zhuǎn)換為A-F//因?yàn)檩敵龅目赡苁菙?shù)值也可能是字符,使用字符串類型String HexStr1=(num3>9)?(char)(num3-10+'A')+"":num3+"";//3)num3>>4獲得倒數(shù)第二個(gè)四位二進(jìn)制數(shù)int num4=(num>>4)&15;String HexStr2=(num4>9)?(char)(num4-10+'A')+"":num4+"";//4)連接兩個(gè)字符串String HexStr=HexStr2+HexStr1;System.out.println(HexStr);//50} }

十進(jìn)制轉(zhuǎn)十六進(jìn)制的演化過程2

假設(shè)一共32位,減4(最后的四位不需要移動,所以-4),再每次移動4位
使用三元運(yùn)算符輸出其中大于9的字符:(n1>9)?(char)(n1-10+‘A’)+"":n1+""

代碼1:直接輸出

//方法2:使用位運(yùn)算符>>>和&//2-1:直接輸出int num3=842;int n1=0;//假設(shè)一共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();//假設(shè)一共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

總結(jié)

以上是生活随笔為你收集整理的java 进制转换 十进制转二,八,十六进制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。