java进制转换

概念:

N进制表示逢N往前进一位。(N=【2,36】),36= (0-9)个数 + (a-z)个数。java中进制字母位不区分大小写。

单词:

binary    :二进制
octal     :八进制
decimal   :十进制
hex       :十六进制 

(整型换算)方法:

**十进制转其他进制**
Integer.toHexString(int i);//转成16进制
Integer.toBinaryString(int i);//转成二进制
Integer.toOctalString(int i);//转成8进制
Integer.toString(int i,  int radix);//转成任意进制,radix不在【2,36】区间内radix=10

Long.toHexString(long i);//转成16进制
Long.toBinaryString(long i);//转成二进制
Long.toOctalString(long i);//转成8进制
Long.toString(long i,  int radix);//转成任意进制,radix不在【2,36】区间内radix=10 

**其他进制转十进制**
Integer.valueOf(String s, int radix); 返回值类型为Integer,radix不在【2,36】区间内,抛出NumberFormatException异常  
parseInt(String s, int radix); 返回值类型为:int,radix不在【2,36】区间内,抛出NumberFormatException异常    

**各进制间的转换**
**eg.**  Integer.toString(parseInt(String s, int srcRadix), int destRadix);

(浮点型换算)方法:

java中小数只提供了10进制转16进制的方法:
Double.toHexString(double d);//转成16进制小数
Float.toHexString(float f);//转成16进制小数

小数其他各进制间的相互转换,可自行封装方法进行实现。

(含小数)算法:

**十进制转二进制:**
    88.8125
    十进制整数转二进制数:“除以2取余,逆序排列”(短除反取余法) 
    2       88  
    2      44     ……0 
    2     22     ……0 
    2     11      ……0 
    2    5      ……1 
    2    2     ……1 
    2  1     ……0 
    0     ……1
    得到:(88)10 =(1011000)2

    十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)
        0.8125
    X   2
        1.625    1
    X   2
        1.25     1
    X   2
        0.5      0
    X   2
        1        1
    得到:(0.8125)10 =(0.1101)2
    所以:(88.8125)10 =(1011000.1101)2

**八进制转二进制:**
    16.516
    八进制数转换成二进制数:把每一个八进制数转换成3位的二进制数,就得到一个二进制数
     1   6  .  5   1   6
    001 110 . 101 001 110
    所以:(16.516)8=(1110.10100111)2

**十六进制转二进制:**
    6DF.69
    十六进制数转换成二进制数:把每一个十六进制数转换成4位的二进制数,就得到一个二进制数
     6     D    F   .  6    9
    0110  1101 1111 . 0110 1001
    所以:(6DF.69)16=(11011011111.01101001)2

**二进制转十进制:**
    1011000.1101

    整数部分:1011000
    按权展开求和(只计算1对应的权重,权重从左往右,从0开始递增)
    权: 6 5 4 3 2 1 0  
        1 0 1 1 0 0 0
    Math.pow(2, 6) + Math.pow(2, 4) + Math.pow(2, 3) = 64 + 16 + 8 = 88

    小数部分:1101(只计算1对应的权重,权重从右往左,从1开始递减)
    权: -1  -2  -3  -4
         1   1   0   1
    Math.pow(2, -1) + Math.pow(2, -2) + Math.pow(2, -4) = 0.5 + 0.25 + 0.0625 = 0.8125

    所以:(1011000.1101)2 =(88.8125)10

**二进制转八进制:**
    1110.10100111
    二进制数转换成八进制数:从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制数的数字表示,不足
    3位的要用“0”补足3位,就得到一个八进制数

    001 110.101 001 110
     1   6 . 5   1   6
    所以:(1110.101001110)2 =(16.516)8


**二进制转十六进制:**
    11011011111.01101001
    二进制数转换成十六进制数:从小数点开始,整数部分向左、小数部分向右,每4位为一组用一位十六进制数的数字表示,不足
    4位的要用“0”补足4位,就得到一个十六进制数

    0110 1101 1111.0110 1001
     6    D    F  . 6    9 
    所以:(11011011111.01101001)2 = (6DF.69)16

常见使用场景:

二进制:位移运算
十六进制:通过逻辑运算&截取高位低位
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值