java 二进制

精华笔记:

  1. 什么是二进制:逢2进1的计数规则。计算机中的变量/常量都是按照2进制来计算的

    • 2进制:
      • 规则:逢2进1
      • 数字:0 1
      • 基数:2
      • 权:128 64 32 16 8 4 2 1
    • 如何将2进制转换为10进制:
      • 正数:将二进制每个1位置的权相加
  2. 十六进制:逢16进1的计数规则

    • 16进制:

      • 规则:逢16进1
      • 数字:0 1 2 3 4 5 6 7 8 9 a b c d e f
      • 基数:16
      • 权:4096 256 16 1
    • 用途:因为2进制书写太麻烦,所以常常用16进制来缩写2进制

    • 如何缩写:将2进制从低位开始,每4位2进制缩为1位16进制

      :           8  4  2  1
      2进制:  0001 1011 1110 1010 0101
      16进制:  1    b    e    a    5------------0x1bea5:           8  4  2  1
      2进制:  0010 1111 1101 0100 0111 1011
      16进制:  2    f    d    4    7    b-------0x2fd47b:           8  4  2  1
      2进制:  0010 1001 0101 1010 1011 1001
      16进制:  2    9    5    a    b    9-------0x295ab9
      
  3. 补码:-------------------了解

    • 计算机处理有符号数(正负数)的一种编码方式

    • 以4位2进制为例讲解补码的编码规则:

      • 计算机的时候如果超出4位则高位自动溢出舍弃,保持4位不变
      • 将4位2进制数分一半作为负数
      • 最高位称为符号位,高位为1是负数,高位为0是正数
    • 规律数:

      • 0111为4位补码的最大值,规律是1个0和3个1,可以推导出
        • 32位补码的最大值:1个0和31个1---------(01111111111111111111111111111111)
      • 1000为4位补码的最小值,规律是1个1和3个0,可以推导出
        • 32位补码的最小值:1个1和31个0---------(10000000000000000000000000000000)
      • 1111为4位补码的-1,规律是4个1,可以推导出
        • 32位补码的-1:32个1--------------------------(11111111111111111111111111111111)
    • 深入理解负值:

      • 记住32位2进制数的-1的编码:32个1

      • 负值:用-1减去0位置的权

        1)11111111111111111111111111111111 = -1
        2)11111111111111111111111111111101 = -1-2 = -3
        3)11111111111111111111111111111010 = -1-1-4 = -6
        4)11111111111111111111111111110111 = -1-8 = -9
        5)11111111111111111111111111110101 = -1-2-8 = -11
        6)11111111111111111111111111010011 = -1-4-8-32= -45
        

笔记:

  1. 什么是二进制:逢2进1的计数规则。计算机中的变量/常量都是按照2进制来计算的

    • 2进制:

      • 规则:逢2进1
      • 数字:0 1
      • 基数:2
      • 权:128 64 32 16 8 4 2 1
    • 如何将2进制转换为10进制:

      • 正数:将二进制每个1位置的权相加
      public class BinaryDemo {
          public static void main(String[] args) {
              int n = 45; //编译时会被编译为: 101101
              System.out.println(Integer.toBinaryString(n)); //101101,以2进制输出
              System.out.println(n); //45,以10进制输出
      
              n++; //将101101增1----101110
              System.out.println(Integer.toBinaryString(n)); //101110,以2进制输出
              System.out.println(n); //46,以10进制输出
          }
      }
      
  2. 十六进制:逢16进1的计数规则

    • 16进制:

      • 规则:逢16进1
      • 数字:0 1 2 3 4 5 6 7 8 9 a b c d e f
      • 基数:16
      • 权:4096 256 16 1
    • 用途:因为2进制书写太麻烦,所以常常用16进制来缩写2进制

    • 如何缩写:将2进制从低位开始,每4位2进制缩为1位16进制

      :           8  4  2  1
      2进制:  0001 1011 1110 1010 0101
      16进制:  1    b    e    a    5------------0x1bea5:           8  4  2  1
      2进制:  0010 1111 1101 0100 0111 1011
      16进制:  2    f    d    4    7    b-------0x2fd47b:           8  4  2  1
      2进制:  0010 1001 0101 1010 1011 1001
      16进制:  2    9    5    a    b    9-------0x295ab9
      
      public class HexDemo {
          public static void main(String[] args) {
              /*
                16进制:缩写2进制
                1)0x为16进制字面量前缀
                2)0b为2进制字面量前缀,可以加下划线---一般不用,一般都是16进制缩写
                3)计算机内部没有10进制,也没有16进制,只有2进制
                4)Integer.toHexString()可以将16进制数返回
                  显示16进制:System.out.println(Integer.toHexString(n));
               */
              /*
              int n = 0x2fd47b; //0x表示16进制
              int m = 0b10_1111_1101_0100_0111_1011; //0b表示2进制
              System.out.println(Integer.toBinaryString(n)); //按2进制输出
              System.out.println(Integer.toBinaryString(m));
              System.out.println(Integer.toHexString(n)); //按16进制输出
              System.out.println(Integer.toHexString(m));
              System.out.println(n); //按10进制输出
              System.out.println(m);
               */
      
              /*
                8进制: 以0开头------------平时不用
                1)规则:逢8进1
                2)数字:0 1 2 3 4 5 6 7
                3)基数:8
                4)权:512 64 8 1
               */
              int a = 067; //以0开头的表示8进制
              System.out.println(a); //55(6个8+7个1)
              /*
                小面试题:
                int a = 068; 正确吗?
                答:编译错误,因为0开头的表示8进制,8进制最大数字为7
               */
          }
      }
      
  3. 补码:-------------------了解

    • 计算机处理有符号数(正负数)的一种编码方式

    • 以4位2进制为例讲解补码的编码规则:

      • 计算机的时候如果超出4位则高位自动溢出舍弃,保持4位不变
      • 将4位2进制数分一半作为负数
      • 最高位称为符号位,高位为1是负数,高位为0是正数
    • 规律数:

      • 0111为4位补码的最大值,规律是1个0和3个1,可以推导出
        • 32位补码的最大值:1个0和31个1---------(01111111111111111111111111111111)
      • 1000为4位补码的最小值,规律是1个1和3个0,可以推导出
        • 32位补码的最小值:1个1和31个0---------(10000000000000000000000000000000)
      • 1111为4位补码的-1,规律是4个1,可以推导出
        • 32位补码的-1:32个1--------------------------(11111111111111111111111111111111)
    • 深入理解负值:

      • 记住32位2进制数的-1的编码:32个1

      • 负值:用-1减去0位置的权

        1)11111111111111111111111111111111 = -1
        2)11111111111111111111111111111101 = -1-2 = -3
        3)11111111111111111111111111111010 = -1-1-4 = -6
        4)11111111111111111111111111110111 = -1-8 = -9
        5)11111111111111111111111111110101 = -1-2-8 = -11
        6)11111111111111111111111111010011 = -1-4-8-32= -45
        
        public class ComplementDemo {
            public static void main(String[] args) {
                /*
                //规律数:
                int max = Integer.MAX_VALUE; //int的最大值
                int min = Integer.MIN_VALUE; //int的最小值
                System.out.println(Integer.toBinaryString(max));  //0111111...
                System.out.println(Integer.toBinaryString(min));  //1000000...
                System.out.println(Integer.toBinaryString(-1));  //111111...
                 */
        
                int n = -45;
                System.out.println(Integer.toBinaryString(n)); //2进制显示
                System.out.println(n); //10进制显示
        
            }
        }
        
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值