Java笔记(2) —— 进制转换


 

进制介绍

  • 对于整数,有四种表示方式:
    • 二进制: 0、1 满2进1 以0b或0B开头表示
    • 八进制: 0-7 满8进1 以数字0开头表示
    • 十进制: 0-9 满10进1
    • 十六进制: 0-9及A(10)-F(15) 满16进1 以0x或0X开头表示 (A-F不区分大小写)

例:

1
2
3
4
int n1 = 0b1010; // 2
int n2 = 01010; // 8
int n3 = 1010; // 10
int n4 = 0x10101; // 16

2、8、16 ——> 10

  • 从最低位开始,将每个位上的数提取出来,乘以进制数的**(位数 - 1)**次方,然后求和
  • 例:
    • 0b1011 = 1 * 2^0 + 1 * 2^1 + 0 * 2^2 + 1 * 2^3 = 11
    • 01010 = 0 * 8^0 + 1 * 8^1 + 0 * 8^2 + 1 * 8^3 = 520
    • 0x10101 = 1 * 16^0 + 0 * 16^1 + 1 * 16^2 + 0 * 16^3 + 1 * 16^4 = 65793

10 ——> 2、8、16

  • 将该数不断除以进制数,直到商为0为止,然后将每步得到的余数倒过来,就是对应的进制
  • 例:
    • 34/2 = 17 ··· 0
      17/2 = 8 ··· 1
      8 / 2 = 4 ··· 0
      4 / 2 = 2 ··· 0
      2 / 2 = 1 ··· 0

      34(十进制) = 0b00100010(二进制)

2 ——> 8

  • 从低位开始,将二进制数每三位一组,转成对应的八进制数即可
  • 例:
    • 0b11010101 =
      0b11(3)010(2)101(5) = 0325

2 ——> 16

  • 从低位开始,将二进制数每四位一组,转成对应的十六进制数即可
  • 例:
    • 0b11010101 =
      0b1101(13->D)0101(5) = 0xD5

8 ——> 2

  • 将八进制数每一位,转成对应的一个3位的二进制数即可
  • 例:
    • 0237 =
      02(010)3(011)7(111) = 0b010011111

16 ——> 2

  • 将十六进制数每一位,转成对应的一个4位的二进制数即可
  • 例:
    • 0x23B =
      0x2(0010)3(0011)B(1011) = 0b001000111011