进制讲解:二进制、八进制、十进制、十六进制相互转换方式及原码、补码、反码介绍

进制讲解:二进制、八进制、十进制、十六进制相互转换方式及原码、补码、反码介绍

一、进制介绍

对于整数,有四种表示方式:

  1. 二进制:0-1,满2进1,以0b或0B开头。

  2. 十进制:0-9,满10进1.

  3. 八进制:0-7,满8进1,以数字0开头表示。

  4. 十六进制:0-9及A(10)、B(11)、C(12)、D(13)、E(14)、F(15),满16进1,以0x或0X开头表示。此处的A-F不区分大小写。

    举例:

    int n1 = 0b1010; // 二进制
    int n2 = 1010;// 十进制
    int n3 = 01010;// 八进制
    int n4 = 0X10101;// 十六进制 
    

进制对照表:

十进制二进制八进制十六进制
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F
16100002010
17100012111
18100102212
19100112313
20101002414
二、进制转换
  1. 其他转十进制
    • 二进制转十进制

      • 规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。

        // 案例:将0b1011转成十进制的数
        ob1011 = 1 * 2^0 + 1 * 2^1 + 0 * 2^2 + 1 * 2^3 = 1 + 2 + 0 + 8 = 11;
        
    • 八进制转十进制

      • 规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。

        // 案例:将0234转成十进制的数
        0234 = 4 * 8^0 + 3 * 8^1 + 2 * 8^2 = 156;
        
    • 十六进制转十进制

      • 规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。

        // 案例:将0x23A转成十进制的数
        0x23A = 10 * 16^0 + 3 * 16^1 + 2 * 16^2 = 10 + 48 + 512 = 570;
        
    • 练习:

      // 二进制转十进制
      0b10001100 = 0*2^0 + 0*2^1 + 1*2^2 + 1*2^3 + 0*2^4 + 0*2^5 + 0*2^6 + 1*2^7 = 4 + 8 + 128 = 140;
      // 八进制转十进制
      02456 = 6*8^0 + 5*8^1 + 4*8^2 + 2*8^3 = 6 + 40 + 256 + 1024 =  1326;
      // 十六进制转十进制
      0xA45 = 5*16^0 + 4*16^1 + 10*16^2 = 5 + 64 + 2560 = 2629;
      
  2. 十进制转其他
    • 十进制转二进制

      • 规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。

        //案例:将34转成二进制
        34 / 2 = 17; -- 0
        17 / 2 = 8; -- 1
        8 / 2 = 4; -- 0
        4 / 2 = 2; -- 0
        2 / 2 = 1; -- 0
        //故:34 => 0B00100010;
        
    • 十进制转八进制

      • 规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。

        //案例:将131转成八进制
        131 / 8 = 16 -- 3
            16 / 8 = 2 -- 0
        //故:131 => 0203;
        
    • 十进制转十六进制

      • 规则:将该书不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。

        //案例:将237转成十六进制
        237 / 16 = 14 -- 13
        //故:237 => ED;
        
    • 练习:

      // 123 转成 二进制
      123 / 2 = 61 -- 1 
          61 / 2 = 30 -- 1
          	30 / 2 = 15 -- 0
          		15 / 2 = 7 -- 1
          			7 / 2 = 3 -- 1 
          				3 / 2 = 1 -- 1
      // 故:123 => 0B01111011;
      
      // 678 转成 八进制
      678 / 8 = 84 -- 6
          84 / 8 = 10 -- 4
          	10 / 8 = 1 -- 2
      // 故: 678 => 01246;
      
      // 8912 转成 十六进制
      8912 / 16 = 557 -- 0
          557 / 16 = 34 -- 13
          	34 / 16 = 2 -- 2
      // 故: 8912 => 22D0;
      
  3. 二进制转其他
    • 二进制转八进制

      • 规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。

        //案例:将0b11010101  转成八进制
        101 => 5;
        010 => 2;
        11 => 3;
        //故:0b11010101 => 0325;
        
    • 二进制转十六进制

      • 规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。

        //案例:将0b11010101 转成十六进制
        0101 => 5;
        1101 => 13;
        //故:0b11010101 => D5
        
    • 联系:

      //案例:将0b11100101转成八进制
      101 => 5;
      100 => 4;
      11 => 3'
      //故:0b11100101 => 0345
          
      //案例:将0b1110010110 转成十六进制
      0110 => 6;
      1001 => 9;
      11 => 3;
      //故:0b1110010110 => 396
      
  4. 八进制转其他
    • 八进制转二进制

      • 规则:将八进制数每1位,转成对应的一个3位的二进制数即可。

        //案例:将0237 转 成二进制
        7 => 111;
        3 => 011;
        2 => 010;
        //故:0237 => 0b10011111;
        
        //练习:将01230 转 成二进制
        0 => 000;
        3 => 011;
        2 => 010;
        1 => 001;
        //故:01230 => 0b0010 1001 1000;
        
  5. 十六进制转其他
    • 十六进制转二进制

      • 规则:将十六进制数每1位,转成对应的4位的一个二进制数即可。

        //案例:将0x23B 转成二进制
        B => 1011;
        3 => 0011;
        2 => 0010;
        //故:0x23B => 0b0010 0011 1011;
        
        //练习:将0xAB29 转成二进制
        9 => 1001;
        2 => 0010;
        B => 1011;
        A => 1010;
        //故:0xAB29 => 0b1010 1011 0010 1001;
        
三、原码、反码、补码
  1. 二进制的最高位是符号位

    0标识正数,1标识负数

  2. 正数的原码、反码、补码都一样(三码合一)

  3. 负数的反码 = 它的原码符号位不变,其它位取反(0 --> 1,1 --> 0)

  4. 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1

  5. 0的反码,补码都是0

  6. java没有无符号数,换言之,Java中的数都是有符号的

  7. 在计算机运算的时候,都是以补码的方式来运算

  8. 当我们看运算结果的时候,要看它的原码

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值