• 计算机的源头:二进制


    • 引入BigInteger包,通过它和Integer类的API方法进行二进制和十进制的互相转换
    import java.math.BigInteger;
    
    public class Lesson1_1{
      /**
       * @Description:十进制转换成二进制
       * @param decimalSource
       * @return String
       */
      public static String demicalToBinary(int decimalSource) {
        BigInteger bi = new BigInteger(String.valueOf(decimalSource));  //转换成BigInteger
        return bi.toString(2);  //参数2指定的是转化成二进制
      }
    
      /**
       * @Description:二进制转换成十进制
       * @param binarySource
       * @return int
       */
      public static int binaryToDecimal(String binarySource) {
        BigInteger bi = new BigInteger(binarySource, 2);    //转换为BigInteger类型,参数2指定二进制
        return Integer.parseInt(bi.toString());   //默认转换成十进制
      }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    计算机为什么使用二进制

    • 计算机使用二进制和现代计算机系统的硬件实现有关。
    • 组成计算机系统的逻辑电路通常只有两个状态,即开关的接通与断开。
    • 断开的状态用“0”来表示,接通的状态用“1”来表示。
    • 由于每位数据只有两种状态,即便系统受到一定程度干扰,它仍然能够可靠地分辨出数字是“0”还是“1”。
    • 因此,在具体的系统实现中,二进制的数据表达具有抗干扰能力强、可靠性高的优点。
    • 如果用十进制设计具有10种状态的电路,情况就会非常复杂,判断状态的时候出错的几率会大大提高。
    • 另外,二进制非常适合逻辑运算。
    • 逻辑运算中的“true”,“false”,正好与二进制的“1”,“0”相对应。
    • 逻辑运算中的加法(或运算)、乘法(与运算)以及否定(非运算)都可以通过“0”和“1”的加法乘法和减法来实现。

    二进制的移位操作

    import java.math.BigInteger;
    
    public class Lesson1_2{
      /**
       * @Description:向左移位
       * @param num- 等待移位的十进制数,m- 向左移的位数
       * @return int- 移位后的十进制数
       */
      public static int leftShift(int num, int m) {
        return num << m;
      }
    
      /**
       * @Description:向右移位
       * @param num- 等待移位的十进制数,m- 向右移的位数
       * @return int- 移位后的十进制数
       */
      public static int rightShift(int num, int m) {
        return num >>> m;
      }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • Java中的左移和右移的表示不太一样。

    左移位是<<,那右移位为什么是>>>而不是>>呢
    其实>>也是右移操作
    根本原因是Java的二进制数值中最高一位是符号位
    Java里定义了两种右移:逻辑右移和算术右移
    逻辑右移1位,左边补0即可;算术右移保持符号位不变,除符号位以外的右移一位并补符号位1,补的1仍然在符号位之后
    在这里插入图片描述
    在这里插入图片描述

    • 逻辑右移在Java和Python中使用>>>表示,算术右移使用>>表示。
    • 在C或C++中,逻辑右移和算术右移共享同一个运算符>>。编译器由运算数的类型来决定使用逻辑或者算术右移。
    • 如果运算数类型是unsigned,采用逻辑右移;signed,采用算术右移。
    • 如果针对unsigned类型的数据使用算术右移,或者针对signed类型的数据使用逻辑右移,需要先进行类型转换。
    • 由于左移位无需考虑高位补1还是补0,所以不需要区分逻辑左移和算术左移。

    这里是引用
    在这里插入图片描述
    在这里插入图片描述

    • Java中使用|表示安慰的或,&表示按位与,^表示按位异或
    import java.math.BigInteger;
    
    public class Lesson1_3{
      /**
       * @Description:二进制按位或的操作
       * @param num1- 第一个数字,num2- 第二个数字
       * @return 二进制按位或的结果
       */
      public static int or(int num1, int num2) {
        return (num1 | num2);
      }
    
      /**
       * @Description:二进制按位与的操作
       * @param num1- 第一个数字,num2- 第二个数字
       * @return 二进制按位与的结果
       */
      public static int and(int num1, int num2) {
        return (num1 & num2);
      }
    
      /**
       * @Description:二进制按位异或的操作
       * @param num1- 第一个数字,num2- 第二个数字
       * @return 二进制按位异或的结果
       */
      public static int xor(int num1, int num2) {
        return (num1 ^ num2);
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    二进制贯穿在很多常用的概念和思想中,例如逻辑判断、二分法、二叉树等等。
    逻辑判断中的真假值就是用二进制的1和0来表示的。
    二分法和二叉树都是把要处理的问题一分为二,正好也可以通过二进制的1和0来表示。

    移位操作:二进制左移一位,就是将数字翻倍。二进制右移一位,就是将数字除以2并求整数商。
    逻辑操作:或:参与操作的位中只要有一个是1,最终结果就是1.
    与:参与操作的位中必须全都是1,最终结果才是1,否则就为0.
    异或:参与操作的位相同,最终结果就为0,否则为1.

  • 相关阅读:
    Golang 中的调试技巧
    LINQ to SQL (Group By/Having/Count/Sum/Min/Max/Avg操作符)
    Python 遍历字典的若干方法
    Android11.0禁止安装apk功能
    快速安装NGINX
    电动两轮车智能化浪潮崛起,移远通信以全场景解决方案引领户外出行新变革
    集团公司管控的三种模式:财务管控、运营管控、战略管
    web测试之功能测试常用的方法有哪几种?有什么要点要注意?
    是时候开始构建适用于 Android Automotive OS 的应用了
    Java8 Stream 从入门到精通 一
  • 原文地址:https://blog.csdn.net/qq_43806430/article/details/125569693