2进制,8进制,16进制相互转换

概念

2进制,用两个阿拉伯数字:0、1
8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7
10进制,用十个阿拉伯数字:0、1、2、3、4、5、6、7、8、9
16进制,用十六个阿拉伯数字:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F

十六进制

Java例子

使用JDK自带方法,16进制,先转换成10进制,再转换成2进制、8进制、16进制。

//十六进制转成十进制  
System.out.println("十六进制转成十进制:"+Integer.valueOf("e",16).toString());  
//十六进制转成二进制  
System.out.println("十六进制转成二进制:"+Integer.toBinaryString(Integer.valueOf("FFFF",16)));          //16进制先转换成10进制,再转换成2进制  
//十六进制转成八进制  
System.out.println("十六进制转成八进制:"+Integer.toOctalString(Integer.valueOf("FFFF",16)));           //16进制先转换成10进制,再转换成8进制  
十六进制转成十进制:14  
十六进制转成二进制:1111111111111111  
十六进制转成八进制:177777  

十进制

10转2

整数

10进制数转换成二进制数,这是一个连续除2的过程:把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。
整数除以2,商继续除以2,得到0为止,将余数逆序排列。

例子1

转换6为二进制数

三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110。

例子2

转换22为二进制数

22 /2     11  余 0  
11 /2      5  余 1  
5  /2      2  余 1  
2  /2      1  余 0  
1  /2      0  余 1  

所以22的二进制是10110

负数

将10进制负数转换为2进制:先得到该10进制负数的绝对值,然后转换为2进制,然后将该2进制取反,然后加1。

例子

-85

得到绝对值:85  
转换为二进制:01010101  
取反:10101010  
+1:10101011(补码)  

-85转换为二进制为10101011。

小数

小数乘以2,取整,小数部分继续乘以2,取整,得到小数部分0为止,将整数顺序排列。

例子

0.8125x2=1.625 取整1,小数部分是0.625  
0.625x2=1.25 取整1,小数部分是0.25  
0.25x2=0.5 取整0,小数部分是0.5  
0.5x2=1.0 取整1,小数部分是0,结束  

所以0.8125的二进制是0.1101(取整数部分)
10进制22.8125等于2进制10110.1101

10转8

整数

除数8,取整数。
来看一个例子,如何将十进制数120转换成八进制数。
120转换为8进制,结果为:170。

小数

小数乘以8,取整,小数部分继续乘以8,取整,得到小数部分0为止,将整数顺序排列。

例子

0.12*8=0.96,   取0 (整数部分得 0, 小数部分为0.96, 下次再用)  
0.96*8=7.68,   取7 (整数部分得 7)  
0.68*8=5.44,   取5 (整数部分得 5)  
0.44*8=3.52,   取3 (整数部分得 3)  
0.52*8=4.16,   取4 (整数部分得 4)  

10转N

10进制数转换成16进制的方法,和转换为2进制、八进制的方法类似,惟一变化:除数由2变成16。

Java例子

使用JDK自带方法,10进制转换成2进制,8进制,16进制。

//十进制转成十六进制  
System.out.println("十进制转成十六进制:"+Integer.toHexString(14));  
//十进制转成八进制  
System.out.println("十进制转成八进制:"+Integer.toOctalString(14));  
//十进制转成二进制  
System.out.println("十进制转成二进制:"+Integer.toBinaryString(14));  
十进制转成十六进制:e  
十进制转成八进制:16  
十进制转成二进制:1110  

八进制

Java例子

使用JDK自带方法,8进制,先转换成10进制,再转换成2进制、10进制、16进制。

//八进制转成二进制  
System.out.println("八进制转成二进制:"+Integer.toBinaryString(Integer.valueOf("23",8)));  
//八进制转成十进制  
System.out.println("八进制转成十进制:"+Integer.valueOf("23",8).toString());;  
//八进制转成十六进制  
System.out.println("八进制转成十六进制:"+Integer.toHexString(Integer.valueOf("23",8)));  
八进制转成二进制:10011  
八进制转成十进制:19  
八进制转成十六进制:13  

二进制

2转10

整数

例子1

110换成10进制
2,1,0
$(110)_2$ = $12^2+12^1+0*2^0$ = 6

例子2

7,6,5,4, 3,2,1,0
$(1111 ,1011)2$=$(FB){16}$

1111=8+4+2+1=15;  
1011=8+2+1=11;  

由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。

负数

将2进制负数转换为10进制:先对该2进制数取反,然后加1,再转换为10进制,然后在前面加上负号。

例子

10101011 最高位为1,所以为负数

取反: 01010100  
+1 : 01010101(补码)  
转换为10进制:85  
加上负号: -85  

所以10101011 转换为十进制为 -85。

2转8

2换8进制时,从右到左,三位一组,不够补0。

例子

111:2的2次方,2的1次方,2的0次方。

     4   2   1  
010 110 111 011  

然后每组中的3个数分别对应4、2、1,然后再相加。

010 = 2  
110 = 4+2 = 6  
111 = 4+2+1 = 7  
011 = 2+1 = 3  

结果为:2673

2转16(8421)

8.4.2.1 分别是4位二进数的位取值。

  • 二进制 <-> 十六进制:8 4 2 1 :1111=8+4+2+1,1001=8+0+0+1
  • 二进制 <-> 八进制 :4 2 1 :101=4+0+1,110=4+2+0

    Java例子

    使用JDK自带方法,2进制,先转换成10进制,再转换成8进制、10进制、16进制。
    //二进制转八进制  
    System.out.println("二进制转八进制:"+Integer.toOctalString(Integer.parseInt("0101", 2)));  
    //二进制转十进制  
    System.out.println("二进制转十进制:"+Integer.valueOf("0101",2).toString());  
    //二进制转十六进制  
    System.out.println("二进制转十六进制:"+Integer.toHexString(Integer.parseInt("0101", 2)));  
    
    二进制转八进制:5  
    二进制转十进制:5  
    二进制转十六进制:5  
    

    原码、反码、补码

    在计算机中,负数以其正值的补码形式表达。
    比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为
    00000000 00000000 00000000 00000101
    5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0(-5)。

    原码

    一个整数,按照绝对值大小转换成的二进制数,称为原码。

    例子

    00000000 00000000 00000000 00000101 是5的原码。

    反码

    将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

    取反操作指

    原为1,得0;原为0,得1。(1变0; 0变1)

    例子

    将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。
    11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。
    反码是相互的,所以也可称
    11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。

    补码

    反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

    例子1

    00000000 00000000 00000000 00000101 的反码是11111111 11111111 11111111 11111010。
    那么,补码为11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011。
    所以,-5 在计算机中表达为 11111111 11111111 11111111 11111011。转换为十六进制0xFFFFFFFB。

    例子2

    -1在计算机中如何表示。假设这也是一个int类型。
  • 先取1的原码00000000 00000000 00000000 00000001
  • 得反码 11111111 11111111 11111111 11111110
  • 得补码 11111111 11111111 11111111 11111111

可见,-1在计算机里用二进制表达就是全1。16进制为0xFFFFFFFF。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×