精华内容
下载资源
问答
  • 因为自带的方法在进行十六进制转为二进制的时候,精度在13位字符后就会出现丢失,为了让精度不丢失就自己根据16进制转换2进制的原理写了两个两个方法 如果长度没有超过13位,可以用parseInt("125adf8",...

           为什么要单独写个方法去做不同进制之间的转换呢?因为自带的方法在进行十六进制转为二进制的时候,精度在13位字符后就会出现丢失,为了让精度不丢失就自己根据16进制转换2进制的原理写了两个方法

        如果长度没有超过13位,可以用parseInt("125adf8",16).toString(2)='1001001011010110111111000',

       十六进制转换二进制  (本次转换的方法没有考虑带小数点的情况)

    function hex_to_bin(str) {
                let hex_array = [{key:0,val:"0000"},{key:1,val:"0001"},{key:2,val:"0010"},{key:3,val:"0011"},{key:4,val:"0100"},{key:5,val:"0101"},{key:6,val:"0110"},{key:7,val:"0111"},
                    {key:8,val:"1000"},{key:9,val:"1001"},{key:'a',val:"1010"},{key:'b',val:"1011"},{key:'c',val:"1100"},{key:'d',val:"1101"},{key:'e',val:"1110"},{key:'f',val:"1111"}]
    
                let value=""
                for(let i=0;i<str.length;i++){
                    for(let j=0;j<hex_array.length;j++){
                        if(str.charAt(i).toLowerCase()== hex_array[j].key){
                            value = value.concat(hex_array[j].val)
                            break
                        }
                    }
                }
                console.log(value)
                return value
            }

    二进制转十六进制    (本次转换的方法没有考虑带小数点的情况)

    function bin_to_hex(str) {
                let hex_array = [{key:0,val:"0000"},{key:1,val:"0001"},{key:2,val:"0010"},{key:3,val:"0011"},{key:4,val:"0100"},{key:5,val:"0101"},{key:6,val:"0110"},{key:7,val:"0111"},
                    {key:8,val:"1000"},{key:9,val:"1001"},{key:'a',val:"1010"},{key:'b',val:"1011"},{key:'c',val:"1100"},{key:'d',val:"1101"},{key:'e',val:"1110"},{key:'f',val:"1111"}]
                let value = ''
                let list=[]
                console.log(str)
                if(str.length%4!==0){
                    let a = "0000"
                    let b=a.substring(0,4-str.length%4)
                    str = b.concat(str)
                }
                console.log(str)
                while (str.length > 4) {
                    list.push(str.substring(0, 4))
                    str = str.substring(4);
                }
                list.push(str)
                console.log(list)
                for(let i=0;i<list.length;i++){
                    for(let j=0;j<hex_array.length;j++){
                        if(list[i]==hex_array[j].val){
                            value = value.concat(hex_array[j].key)
                            break
                        }
                    }
                }
                console.log(value)
                return value
            }

    异或运算 (需要上面两个方法做基础)

    function xor(a ,b){
                let A = hex_to_bin(a)
                let B = hex_to_bin(b)
                console.log(a+"   a的二进制:"+A)
                console.log(b+"   b的二进制:"+B)
                let o = "00000000000000000000000000000000000"
                if(A.toString().length > B.toString().length){
                    let c = A.toString().length - B.toString().length
                    B = o.substr(0,c).concat(B)
                }else if(A.toString().length < B.toString().length){
                    let c = B.toString().length - A.toString().length
                    A = o.substr(0,c).concat(A)
                }
                console.log('B:'+B)
                console.log('A:'+A)
                let d = ""
                for(let i=0;i<A.toString().length;i++){
                    if(A.toString()[i]==B.toString()[i]){
                        let q="0"
                        d = d.concat(q)
                    }else{
                        let p="1"
                        d = d.concat(p)
                    }
                }
                console.log(bin_to_hex(d))
                return bin_to_hex(d)
            }

    版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/lixiwoaini/article/details/82179094

    展开全文
  •  之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于、八、十、十六进制转换的计算公式的,进制之间的转换是很基础的知识,但是我发现网络上没有一篇能把它说的...

    目录

    三.进制转换算法(Convert)

    (一) (二、八、十六进制) → (十进制)

    (二) (十进制) → (二、八、十六进制)

    (三) (二进制) ↔ (八、十六进制)

    (四) (八进制) ↔ (十六进制)

    四.扩展阅读


     

     之前使用SQL把十进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于二、八、十、十六进制转换的计算公式的,进制之间的转换是很基础的知识,但是我发现网络上没有一篇能把它说的清晰、简单、易懂的文章,所以我才写这篇文章的念头,希望能让你再也不用担心、害怕进制之间的转换了。

      下面是二、八、十、十六进制之间关系的结构图:

    wpsC01D.tmp

    (Figure1:进制关系结构图)

    下文会分4个部分对这个图进行分解,针对每个部分会以图文的形式进行讲解:

    1. (二、八、十六进制) → (十进制);
    2. (十进制) → (二、八、十六进制);
    3. (二进制) ↔ (八、十六进制);
    4. (八进制) ↔ (十六进制);

    三.进制转换算法(Convert)

      在数字后面加上不同的字母来表示不同的进位制。B(Binary)表示二进制,O(Octal)表示八进制,D(Decimal)或不加表示十进制,H(Hexadecimal)表示十六进制。例如:(101011)B=(53)O=(43)D=(2B)H

    (一) (二、八、十六进制) → (十进制)

    wpsC01E.tmp

    (Figure2:其他进制转换为十进制)

    • 二进制 → 十进制

      方法:二进制数从低位到高位(即从右往左)计算,第0位的权值是2的0次方,第1位的权值是2的1次方,第2位的权值是2的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

      例:将二进制的(101011)B转换为十进制的步骤如下:

    1. 第0位 1 x 2^0 = 1;

    2. 第1位 1 x 2^1 = 2;

    3. 第2位 0 x 2^2 = 0;

    4. 第3位 1 x 2^3 = 8;

    5. 第4位 0 x 2^4 = 0;

    6. 第5位 1 x 2^5 = 32;

    7. 读数,把结果值相加,1+2+0+8+0+32=43,即(101011)B=(43)D。

    • 八进制 → 十进制

      方法:八进制数从低位到高位(即从右往左)计算,第0位的权值是8的0次方,第1位的权值是8的1次方,第2位的权值是8的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

      八进制就是逢8进1,八进制数采用 0~7这八数来表达一个数。

      例:将八进制的(53)O转换为十进制的步骤如下:

    1. 第0位 3 x 8^0 = 3;

    2. 第1位 5 x 8^1 = 40;

    3. 读数,把结果值相加,3+40=43,即(53)O=(43)D。

    • 十六进制 → 十进制

      方法:十六进制数从低位到高位(即从右往左)计算,第0位的权值是16的0次方,第1位的权值是16的1次方,第2位的权值是16的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。

      十六进制就是逢16进1,十六进制的16个数为0123456789ABCDEF。

      例:将十六进制的(2B)H转换为十进制的步骤如下:

    1. 第0位 B x 16^0 = 11;

    2. 第1位 2 x 16^1 = 32;

    3. 读数,把结果值相加,11+32=43,即(2B)H=(43)D。

    (二) (十进制) → (二、八、十六进制)

    wpsC01F.tmp

    (Figure3:十进制转换为其它进制)

    • 十进制 → 二进制

      方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。 

      例:将十进制的(43)D转换为二进制的步骤如下:

    1. 将商43除以2,商21余数为1;

    2. 将商21除以2,商10余数为1;

    3. 将商10除以2,商5余数为0;

    4. 将商5除以2,商2余数为1;

    5. 将商2除以2,商1余数为0; 

    6. 将商1除以2,商0余数为1; 

    7. 读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,101011,即(43)D=(101011)B。

    wpsC02F.tmp

    (Figure4:图解十进制 → 二进制)

    • 十进制 → 八进制

      方法1:除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。

      例:将十进制的(796)D转换为八进制的步骤如下:

    1. 将商796除以8,商99余数为4;

    2. 将商99除以8,商12余数为3;

    3. 将商12除以8,商1余数为4;

    4. 将商1除以8,商0余数为1;

    5. 读数,因为最后一位是经过多次除以8才得到的,因此它是最高位,读数字从最后的余数向前读,1434,即(796)D=(1434)O。

    wpsC030.tmp

    (Figure5:图解十进制 → 八进制)

      方法2:使用间接法,先将十进制转换成二进制,然后将二进制又转换成八进制;

    wpsC031.tmp

    (Figure6:图解十进制 → 八进制)

    • 十进制 → 十六进制

      方法1:除16取余法,即每次将整数部分除以16,余数为该位权上的数,而商继续除以16,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。

      例:将十进制的(796)D转换为十六进制的步骤如下:

    1. 将商796除以16,商49余数为12,对应十六进制的C;

    2. 将商49除以16,商3余数为1;

    3. 将商3除以16,商0余数为3;

    4. 读数,因为最后一位是经过多次除以16才得到的,因此它是最高位,读数字从最后的余数向前读,31C,即(796)D=(31C)H。

    wpsC042.tmp

    (Figure7:图解十进制 → 十六进制)

      方法2:使用间接法,先将十进制转换成二进制,然后将二进制又转换成十六进制;

    wpsC043.tmp

    (Figure8:图解十进制 → 十六进制)

    (三) (二进制) ↔ (八、十六进制)

    wpsC044.tmp

    (Figure9:二进制转换为其它进制)

    • 二进制 → 八进制

      方法:取三合一法,即从二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的八进制数。如果向左(向右)取三位后,取到最高(最低)位时候,如果无法凑足三位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足三位。

      例:将二进制的(11010111.0100111)B转换为八进制的步骤如下:

    1. 小数点前111 = 7;

    2. 010 = 2;

    3. 11补全为011,011 = 3;

    4. 小数点后010 = 2;

    5. 011 = 3;

    6. 1补全为100,100 = 4;

    7. 读数,读数从高位到低位,即(11010111.0100111)B=(327.234)O。

    wpsC054.tmp

    (Figure10:图解二进制 → 八进制)

    二进制与八进制编码对应表:

    二进制

    八进制

    000

    0

    001

    1

    010

    2

    011

    3

    100

    4

    101

    5

    110

    6

    111

    7

     

    • 八进制 → 二进制

      方法:取一分三法,即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置照旧。

      例:将八进制的(327)O转换为二进制的步骤如下:

    1. 3 = 011;

    2. 2 = 010;

    3. 7 = 111;

    4. 读数,读数从高位到低位,011010111,即(327)O=(11010111)B。

    wpsC055.tmp

    (Figure11:图解八进制 → 二进制)

    • 二进制 → 十六进制

      方法:取四合一法,即从二进制的小数点为分界点,向左(向右)每四位取成一位,接着将这四位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。如果向左(向右)取四位后,取到最高(最低)位时候,如果无法凑足四位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足四位。

      例:将二进制的(11010111)B转换为十六进制的步骤如下:

    1. 0111 = 7;

    2. 1101 = D;

    3. 读数,读数从高位到低位,即(11010111)B=(D7)H。

    wpsC056.tmp

    (Figure12:图解二进制 → 十六进制)

    • 十六进制 → 二进制

      方法:取一分四法,即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。

      例:将十六进制的(D7)H转换为二进制的步骤如下:

    1. D = 1101;

    2. 7 = 0111;

    3. 读数,读数从高位到低位,即(D7)H=(11010111)B。

    wpsC057.tmp

    (Figure13:图解十六进制 → 二进制)

    (四) (八进制) ↔ (十六进制)

    wpsC058.tmp

    (Figure14:八进制与十六进制之间的转换)

    • 八进制 → 十六进制

      方法:将八进制转换为二进制,然后再将二进制转换为十六进制,小数点位置不变。

      例:将八进制的(327)O转换为十六进制的步骤如下:

    1. 3 = 011;

    2. 2 = 010;

    3. 7 = 111;

    4. 0111 = 7;

    5. 1101 = D;

    6. 读数,读数从高位到低位,D7,即(327)O=(D7)H。

    wpsC069.tmp

    (Figure15:图解八进制 → 十六进制)

    • 十六进制 → 八进制

      方法:将十六进制转换为二进制,然后再将二进制转换为八进制,小数点位置不变。

      例:将十六进制的(D7)H转换为八进制的步骤如下:

    1. 7 = 0111;

    2. D = 1101;

    3. 0111 = 7;

    4. 010 = 2;

    5. 011 = 3;

    6. 读数,读数从高位到低位,327,即(D7)H=(327)O。

    wpsC06A.tmp

    (Figure16:图解十六进制 → 八进制)

    四.扩展阅读

      1. 包含小数的进制换算:

    (ABC.8C)H=10x16^2+11x16^1+12x16^0+8x16^-1+12x16^-2

    =2560+176+12+0.5+0.046875

    =(2748.546875)D

      2. 负次幂的计算:

    2^-5=2^(0-5)=2^0/2^5=1/2^5

    同底数幂相除,底数不变,指数相减,反过来

    3. 我们需要了解一个数学关系,即23=8,24=16,而八进制和十六进制是用这关系衍生而来的,即用三位二进制表示一位八进制,用四位二进制表示一位十六进制数。接着,记住4个数字8、4、2、1(23=8、22=4、21=2、20=1)。

     

    reference:

    https://www.cnblogs.com/gaizai/p/4233780.html

    展开全文
  • java Ê®½øÖÆÊýת»»Îª¶þ½øÖÆ,°Ë½øÖÆ,Ê®Áù½øÖÆÊýµÄË㕨using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;...

    java Ê®½øÖÆÊýת»»Îª¶þ½øÖÆ,°Ë½øÖÆ,Ê®Áù½øÖÆÊýµÄË㕨

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Text;

    using System.Windows.Forms;

    namespace ExDtoB

    {public partial classForm1 : Form

    {publicForm1()

    {

    InitializeComponent();

    }//Ê®½øÖÆת¶þÖÆ

    public string DtoB(intd)

    {

    string b= "";//ÅжϸÃÊýÈç¹ûСÓÚ2£¬ÔòÖ±½ÓÊä³ö

    if (d < 2)

    {

    b=d.ToString();

    }else{intc;int s = 0;int n =d;while (n >= 2)

    {

    s++;

    n= n / 2;

    }int[] m = new int[s];int i = 0;do{

    c= d / 2;

    m[i++] = d % 2;

    d=c;

    }while (c >= 2);

    b=d.ToString();for (int j = m.Length - 1; j >=0; j--)

    {

    b+=m[j].ToString ();

    }

    }returnb;

    }//Ê®½øÖÆת°Ë½øÖÆ

    public string DtoO(intd)

    {

    string o= "";if (d < 8)

    {

    o=d.ToString();

    }else{intc;int s=0;int n=d;int temp =d;while (n >= 8)

    {

    s++;

    n= n / 8;

    }int[] m = new int[s];int i = 0;do{

    c= d / 8;

    m[i++] = d % 8;

    d=c;

    }while (c >= 8);

    o=d.ToString();for (int j = m.Length - 1; j >= 0; j--)

    {

    o+=m[j];

    }

    }returno;

    }//Ê®½øÖÆתʮÁù½øÖÆ

    public string DtoX(intd)

    {

    string x= "";if (d < 16)

    {

    x=chang(d);

    }else{intc;int s = 0;int n =d;int temp =d;while (n >= 16)

    {

    s++;

    n= n / 16;

    }

    string [] m= newstring[s];int i = 0;do{

    c= d / 16;

    m[i++] = chang(d % 16);//ÅжÏÊÇ•ñ´óÓÚ10£¬Èç¹û´óÓÚ10£¬Ôòת»»ÎªA~FµÄ¸ñʽ

    d =c;

    }while (c >= 16);

    x=chang(d);for (int j = m.Length - 1; j >= 0; j--)

    {

    x+=m[j];

    }

    }returnx;

    }//ÅжÏÊÇ•ñΪ10~15Ö®¼äµÄÊý£¬Èç¹ûÊÇÔò½øÐÐת»»

    public string chang(intd)

    {

    string x= "";switch(d)

    {case 10:

    x= "A";break;case 11:

    x= "B";break;case 12:

    x= "C";break;case 13:

    x= "D";break;case 14:

    x= "E";break;case 15:

    x= "F";break;default:

    x=d.ToString();break;

    }returnx;

    }private voidbutton1_Click(object sender, EventArgs e)

    {

    textBox2.Text= DtoB(Convert.ToInt32(textBox1.Text));//ʮת¶þ½øÖÆ

    }private voidbutton2_Click(object sender, EventArgs e)

    {

    textBox2.Text= DtoO(Convert.ToInt32(textBox1.Text));//ʮת°Ë½øÖÆ

    }private voidbutton3_Click(object sender, EventArgs e)

    {

    textBox2.Text= DtoX(Convert.ToInt32(textBox1.Text));//ʮתʮÁù½øÖÆ

    }

    }

    }

    展开全文
  • java_十进制数转换为二进制,八进制,十六进制的算法
  • 一、 十六进制转换为八进制 主要思想为: 十六进制转化为二进制 二进制转化为八进制 (1)十六进制转化为二进制 从字符串数组中使用charat(i)函数逐个读取字符,并使用switch将其逐步转化为二进制形式 ...

    一、 十六进制转换为八进制

    主要思想为:

    1. 十六进制转化为二进制
    2. 二进制转化为八进制

    (1)十六进制转化为二进制

    1. 从字符串数组中使用charat(i)函数逐个读取字符,并使用switch将其逐步转化为二进制形式
    2. 转化后的结果保存在stringBuffer对象中,使用append方法;
    3. 结果转化为字符串并传回main函数中,字符串进行判断,根据位数书,判断是否是4的倍数,若不是,则前头补0;

    (2)二进制转化为八进制

    1. 首先判断二进制数的前三位,若全为0,则跳过从第四位开始读,此举是为了防止转化为八进制后首位为0的情况。
    2. 使用substring方法每3位都一次,转化后放进stringbuffer对象中。
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
                  //读取输入的十六进制数字个数
                    Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            String[] hexa = new String[n];
            String string;
            scanner.nextLine();
            for(int i=0;i<n;i++)
            {
                           //读取十六进制数存入字符串数组中
                hexa[i] = scanner.next();
            }
            for(int i=0;i<n;i++)
            {
                           //调用函数,将十六进制数转化为二进制数,返回字符串
                string = tobinary(hexa[i]);
                int length_bin = string.length();
                            //对不满足4倍个数的字符串前头补0
                if(length_bin%3==1) string = "000"+string;
                if(length_bin%3==2) string = "00"+string;
                            //调用函数,将二进制数转化为八进制数
                String stroct = toOct(string);
                           //输出结果
                System.out.println(stroct);
            }
            
        }
        //将十六进制转化为二进制
        private static String tobinary(String hexa)
        {
            int length = hexa.length();
            StringBuffer aBuffer = new StringBuffer();    
            for(int i=0;i<length;i++)
            {
                //在字符串中逐步读取字符并替换为相应的二进制数,注意!!charat函数是从头开始读
                switch (hexa.charAt(i)) {
                case '0':
                    aBuffer.append("0000");
                    break;
                case '1':
                    aBuffer.append("0001");
                    break;
                case '2':
                    aBuffer.append("0010");
                    break;
                case '3':
                    aBuffer.append("0011");
                    break;
                case '4':
                    aBuffer.append("0100");
                    break;
                case '5':
                    aBuffer.append("0101");
                    break;
                case '6':
                    aBuffer.append("0110");
                    break;
                case '7':
                    aBuffer.append("0111");
                    break;
                case '8':
                    aBuffer.append("1000");
                    break;
                case '9':
                    aBuffer.append("1001");
                    break;
                case 'A':
                    aBuffer.append("1010");
                    break;
                case 'B':
                    aBuffer.append("1011");
                    break;
                case 'C':
                    aBuffer.append("1100");
                    break;
                case 'D':
                    aBuffer.append("1101");
                    break;
                case 'E':
                    aBuffer.append("1110");
                    break;
                case 'F':
                    aBuffer.append("1111");
                    break;
                default:
                    break;
                }
            }
            return aBuffer.toString();
            
        }
        //将二进制转化为八进制
        private static String toOct(String binary)
        {
            int len = binary.length();
            int k;
            StringBuffer stringBuffer = new StringBuffer();
                    //判断开始位置,去除转化为八进制数后首位为0的情况
            if(binary.substring(0, 4).equals("000"))
                k=3;
            else
                k=0;
            for(int i=k;i<len-2;i++)
            {
                switch (binary.substring(i,i+3)) {
                case "000":
                    stringBuffer.append("0");
                    break;
                case "001":
                    stringBuffer.append("1");
                    break;
                case "010":
                    stringBuffer.append("2");
                    break;
                case "011":
                    stringBuffer.append("3");
                    break;
                case "100":
                    stringBuffer.append("4");
                    break;
                case "101":
                    stringBuffer.append("5");
                    break;
                case "110":
                    stringBuffer.append("6");
                    break;
                case "111":
                    stringBuffer.append("7");
                    break;
                default:
                    break;
                }
            }
            return stringBuffer.toString();
    }
    }  

      

    二、十六进制转化为十进制(方法一)

    主要思想为:

    1. 十六进制转化为二进制
    2. 二进制转化为十进制

    其中步骤一与之前的类似,重点说一下步骤二

    1. 设置标志符号位flag,用于确定字符读到哪一位;
    2. 从首尾开始读,按照2的阶乘的方法计算后各位相加,得到最终的10进制数(常规算法)
    /*方法一*/
    import
    java.util.Scanner; public class Main { public static void main(String[] args) { Scanner aScanner =new Scanner(System.in); String aString; long result; aString = aScanner.nextLine(); aString = tobinary(aString); result = todec(aString); System.out.println(result); } private static String tobinary(String ahex) { StringBuffer aBuffer = new StringBuffer(); int len = ahex.length(); for(int i =0;i<len;i++) { switch(ahex.charAt(i)) { case '0': aBuffer.append("0000"); break; case '1': aBuffer.append("0001"); break; case '2': aBuffer.append("0010"); break; case '3': aBuffer.append("0011"); break; case '4': aBuffer.append("0100"); break; case '5': aBuffer.append("0101"); break; case '6': aBuffer.append("0110"); break; case '7': aBuffer.append("0111"); break; case '8': aBuffer.append("1000"); break; case '9': aBuffer.append("1001"); break; case 'A': aBuffer.append("1010"); break; case 'B': aBuffer.append("1011"); break; case 'C': aBuffer.append("1100"); break; case 'D': aBuffer.append("1101"); break; case 'E': aBuffer.append("1110"); break; case 'F': aBuffer.append("1111"); break; default: break; } } return aBuffer.toString(); } private static long todec(String abin) { long length = abin.length();
    //标志符号位
    long sign = length-1; long a = 0; for(int i=0;i<length;i++) { switch(abin.charAt(i)) { case '0': sign--; break; case '1': a = (int) (a + Math.pow(2, sign)); sign--; break; default: break; } } return a; } }

     

    三、十六进制转化为十进制(方法二,原创)

    此类方法使我在考虑到十六进制转化为十进制时对二进制的转化过于繁琐而思索出来的,直接将十六机制转化为十进制的方法

    比较上述而言代码长度更短,所用时间也较短。

    思想:

    • 从首位开始读取十六进制数AB2,将其转化为对应的10进制数:10 11 2
    • 核心算法:sum = sum + (long) (num*Math.pow(2, (position-1)*4));每位相加,但在相加之前乘以2的(n-1)*4次方,此处的n为位数
    • 即 10*(3-1)*4+11*(2-1)*4+2*(1-1)*4 = result;
      /*方法二*/ 
    import java.util.Scanner;
    
    public class Main {
    public static void main(String[] args) {
         Scanner aScanner =new Scanner(System.in);
            String aString;
            aString = aScanner.nextLine();
            char[] abin = new char[8];
            abin = aString.toCharArray();
            int len = abin.length;
            long num = 0 , sum = 0,position = len;
            for(int i=0;i<len;i++)
            {
                if(abin[i]>='A' && abin[i]<='F')
                    num = abin[i] - 'A' +10; 
                else
                    num = abin[i] - '0';
                sum = sum + (long) (num*Math.pow(2, (position-1)*4));
                position--;
            }
            
            System.out.println(sum);        
    }
    }

     

    四、十进制转化为十六进制

    思想

    1. 十进制转化为二进制
    2. 二进制转化为十六进制

    (1)十进制转化为二进制

    • 首先使用除2法,得到字符串,而后将字符串反转,得到正确的与十进制数对应的二进制数(见代码,不详解)
    • 补位,验证是否是4的倍数的位数,不足的前面补0

    (2)二进制转化为十六进制

    • 此处与二进制转化为八进制思想相同,见前面,较为简单
    • 需要主要持续使用stringbuffer的对象时要注意清零,便于后续使用,可直接使用setlength(0)方法
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
    Scanner  aScanner = new Scanner(System.in);
            long ten = aScanner.nextLong();
            String aString;
            StringBuffer aBuffer = new StringBuffer();
            long m=1,n=0;
            do
            {
                n = ten%2;
                ten = ten/2;
                aBuffer.append(n);
            }while(ten!=0);
            aString = aBuffer.toString();
            //反转字符串
            char[] achar = new char[100000];
            achar = aString.toCharArray();
            int start = 0;
            int end = achar.length-1;
            while(start<end)
            {
                char temp = achar[start];
                achar[start++] = achar[end];
                achar[end--] = temp;
            }
            aBuffer.setLength(0); //清空内容
            for(int i=0;i<achar.length;i++)
            {
                aBuffer.append(achar[i]);
            }
            aString = aBuffer.toString();
            char[] ahex = new char[10000];
            //补位
            if(achar.length%4==1) 
                aString= "000"+aString;
            else if(achar.length%4==2)
                aString= "00"+aString;
            else if(achar.length%4==3)
                aString= "0"+aString;
            aBuffer.setLength(0); //清空内容
            for(int i=0;i<aString.length()-3;i=i+4)
            {
                switch (aString.substring(i,i+4)) {
                case "0000":
                    aBuffer.append("0");
                    break;
                case "0001":
                    aBuffer.append("1");
                    break;
                case "0010":
                    aBuffer.append("2");
                    break;
                case "0011":
                    aBuffer.append("3");
                    break;
                case "0100":
                    aBuffer.append("4");
                    break;
                case "0101":
                    aBuffer.append("5");
                    break;
                case "0110":
                    aBuffer.append("6");
                    break;
                case "0111":
                    aBuffer.append("7");
                    break;
                case "1000":
                    aBuffer.append("8");
                    break;
                case "1001":
                    aBuffer.append("9");
                    break;
                case "1010":
                    aBuffer.append("A");
                    break;
                case "1011":
                    aBuffer.append("B");
                    break;
                case "1100":
                    aBuffer.append("C");
                    break;
                case "1101":
                    aBuffer.append("D");
                    break;
                case "1110":
                    aBuffer.append("E");
                    break;
                case "1111":
                    aBuffer.append("F");
                    break;
                default:
                    break;
                }
            }
            System.out.println(aBuffer.toString());
            
            aString = aBuffer.toString();
            
            System.out.println();
            
        }
    }

     

    转载于:https://www.cnblogs.com/liuhui5599/p/8550204.html

    展开全文
  • java进制转换(十进制转八进制,十进制转二进制十六进制转八进制) 这几天在复习C语言数据结构栈和队列那一章时候,看到利用栈特性FILO实现的进制转换十分简洁 想起了java中实现栈操作十分方便(不用...
  • 将十进制转换为其它进制时比较复杂,整数部分和小数部分的算法不一样,下面我们分别讲解。 整数部分 十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法。具体做法是: 将 N 作为除数,用十进制整数除以 N...
  •  输出: 10000010 (二进制) 输出: 202 (八进制) 输出: 82 (十六进制)  1、从程序算法的优化程度、程序通用性、程序规范性来评判;  2、没有使用已有函数或软件包来实现,最好是自己根据数制转换...
  •  输出: 10000010 (二进制) 输出: 202 (八进制) 输出: 82 (十六进制)  1、从程序算法的优化程度、程序通用性、程序规范性来评判;  2、没有使用已有函数或软件包来实现,最好是自己根据数制...
  • //判断是否大于10,如果大于10,则转换为A~F格式    d = c;   }  while  (c >= 16);   x = chang(d);    for  ( int  j = m.Length - 1; j >= 0; j--)   {   x ...
  • 利用栈实现把十进制数转换为二进制十六进制之间...利用栈实现把十进制数转换为二进制十六进制之间任一进制数并输出功能,要求设计C++算法。以下函数是要求实现函数: //将非负整数Integer转换为新基数为Ra
  • Java 十进制转换十六进制

    热门讨论 2019-12-29 09:31:12
    因为小编能力有限,所以只能做出来0到255之间十进制数转换为十六进制数。 class HexaDecimal { public static void main(String[] args) { int i1=60;//初始值为60,下文中60均代表i1 int i2=i1&15;//与...
  • //二进制转换为十六进制  private void button2_Click(object sender, EventArgs e)  {  //把二进数转换为十进制数  int intTen = Convert.ToInt32(textBox1.Text.Trim(), 2);  //把十进制数转换为...
  • //将二进制转换为十进制  }  private void btnOtoD_Click(object sender, EventArgs e)  {  this.txtOtoD.Text = ToD(this.txtO.Text, 8);//将八进制转换为十进制  }  private void btnXtoD_...
  • (1) 十进制转换为二进制,分为整数部分和小数部分  ① 整数部分  方法:除2取余法,即每次将整数部分除以2,余数为该位权上数,而商继续除以2,余数又为上一个位权上数,这个步骤一直持续下去,直到...
  • C语言算法之将十进制数转换二进制

    万次阅读 多人点赞 2018-06-20 14:35:29
    导语:在C语言中没有将其他进制的数直接输出为二进制数的工具或方法,输出为八进制数可以用%o,输出为十六进制可以用%x,输出为二进制就要我们自行解决了。下面给大家讲述一下如何编程实现将十进制数转换二进制数...
  • //将二进制转换为十进制  }  private void btnOtoD_Click(object sender, EventArgs e)  {  this.txtOtoD.Text = ToD(this.txtO.Text, 8);//将八进制转换为十进制  }  private void btnXtoD_Click(object ...
  • //判断是否大于10,如果大于10,则转换为A~F格式  d = c;  } while (c >= 16);  x = chang(d);  for (int j = m.Length - 1; j >= 0; j--)  {  x += m[j];  }  }  return x;  }  //判断是否为10~15...
  • //判断是否大于10,如果大于10,则转换为A~F格式 d = c; } while (c >= 16); x = chang(d); for (int j = m.Length - 1; j >= 0; j--) { x += m[j]; } } return x; } //判断是否为10~15...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 257
精华内容 102
关键字:

二进制转换为十六进制的算法