day19-进制

day19-进制

1.二进制

  1. 逢二进一的计数规则

  2. 如何将2进制转换为10进制?

    • 将一个2进制数每个1位置的权值累加即可

  3. Java 所有的变量\常量存储的都是2进制数

  4. 代码

    public class Demo01 {
       public static void main(String[] args) {
           /*
            1.java在编译期间将10进制数编译为2进制数,按2进制来运算
                .java(50) 编译后 .class(110010)
            2.Integer.toBinaryString()可以将底层的2进制数显示出来
            3.int类型是32位2进制数,显示2进制数时自动省略高位0
            4.System.out.println()将2进制转换为10进制输出
            */
           int n = 50; //110010
           System.out.println(Integer.toBinaryString(n)); //2进制
           n++; //110011
           System.out.println(n); //10进制
           System.out.println(Integer.toBinaryString(n)); //2进制
      }
    }

2.16进制

  1. 逢16进1的计数规则

  2. 16进制来缩写2进制数字

  3. 缩写: 将2进制从最低位开始,每4位2进制缩写为1位16进制

  4. 代码:

    public class Demo02 {
       public static void main(String[] args) {
           /*
             16进制:缩写2进制
              1)0x是16进制字面量前缀,0x开头则编译器按照16进制编译
              2)Java 7提供了2进制字面量前缀 0b----不用,一般都用16进制
            */
           int n = 0x4f057afe; //0x表示16进制
           int m = 0b1001111000001010111101011111110; //0b表示二进制
           System.out.println(Integer.toBinaryString(n)); //按2进制输出
           System.out.println(Integer.toBinaryString(m)); //按2进制输出
           //结论:用16进制来表示2进制更方便

           /*
            8进制:
            1)逢8进1的计数规则
            2)前缀0表示为8进制
            3)数字:0,1,2,3,4,5,6,7,没有7以上的数字
            */
           //----小面试题(8进制平时不用)
           //权     64 8 1
           int x =  067; //0开头表示8进制
           System.out.println(x); //十进制的55(6个8加上7个1)

      }
    }

     

3.补码

  1. 计算机中处理有符号数(正负数)的一种编码方式,java中的补码最小类型是int,32位数

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

    • 计算的时候如果超出4位数就自动溢出舍弃,保持4位数不变

    • 将4位2进制数分一半作为负数使用

    • 最高位称为符号位,高位为1是负数,高位为0是正数

      int n = -3;
      System.out.println(Integer.toBinaryString(n));

      /*
      规律数:
      1)0111为4位补码的最大值,规律是1个0和3个1,可以推导出:
       32位补码的最大值,是1个0和31个1-----(011111111...)
      2)1000为4位补码的最小值,规律是1个1和3个0,可以推导出:
       32位补码的最小值,是1个1和31个0-----(100000000...)
      3)1111为4位补码的-1,规律是4个1,可以推导出:
       32位补码的-1是,是32个1------------(11111111...)
      */    
      int max = 2147483647; //int的最大值
      int min = -2147483648; //int的最小值
      System.out.println(Integer.toBinaryString(max)); //011111...
      System.out.println(Integer.toBinaryString(min)); //100000...
      System.out.println(Integer.toBinaryString(-1)); //11111...

  3. 深入理解负值:

    • 记住-1的编码是32个1

    • 用-1减去0位置对应的权值

  4. 互补对称:

     

    • 公式:-n=~n+1 结论:一个数的补码=这个数取反+1

    • 代码

      int n = -3;
      int m = ~n+1;
      System.out.println(m); //3 -3的补码就是-3取

       

  5. 位运算:

    • ~:取反(0变1、1变0)

    • &:与运算(有0则0)

    • |:或运算(有1则1)

    • “>>>”:右移位运算

    • <<:左移位运算

     

posted @ 2022-03-25 09:10  约拿小叶  阅读(94)  评论(0编辑  收藏  举报