精华笔记:

  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进制
  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位二进制数的-1的编码:32个1
      • 负值:用-1减去0位置对应的权---------------负数
    • 互补对称现象:-n=~n+1--------取反+1
  4. 位运算:---------------------了解

    • 取反:~

      • 运算规则:0变1,1变0
    • 与运算:&

      • 运算规则:逻辑乘法,见0则0
    • 或运算:|

      • 运算规则:逻辑加法,见1则1
    • 右移位运算:>>>

      • 运算规则:将2进制数整体向右移动,低位自动溢出舍弃,高位补0
    • 左移位运算:<<

      • 运算规则:将2进制数整体向左移动,高位自动溢出舍弃,低位补0
    • 移位运算的数学意义:

笔记:

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

    • 2进制:

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

      • 将二进制每个1位置的权相加即可---------------正数

        权:    32  16  8  4  2  1
        二进制: 1 0 1 1 0 1
        十进制: 32+8+4+1=45
        int n = 45; //编译时会被编译为:101101
        System.out.println(Integer.toBinaryString(n)); //以2进制输出
        System.out.println(n); //以10进制输出 n++; //将101101增1----101110
        System.out.println(Integer.toBinaryString(n)); //以2进制输出
        System.out.println(n); //以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 1010 1010 0101
      16进制: 1 b a a 5-----------1baa5 权: 8 4 2 1
      2进制: 0010 1111 1101 0100 0111 1011
      16进制: 2 f d 4 7 b------2fd47b 权: 8 4 2 1
      2进制: 0010 1001 0101 1010 1011 1001
      16进制: 2 9 5 a b 9
      //演示16进制
      int n = 0x2fd47b; //0x表示16进制
      int m = 0b0010_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进制
      int a = 067; //以0开头的表示8进制
      System.out.println(a); //55(6个8加7个1)
      /*
      小面试题:-----8进制平时不用
      int a = 068; 正确吗?
      答:编译错误,因为0开头的表示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)
      int max = Integer.MAX_VALUE; //int的最大值
      int min = Integer.MIN_VALUE; //int的最小值
      System.out.println(Integer.toBinaryString(max)); //01111111...
      System.out.println(Integer.toBinaryString(min)); //10000000...
      System.out.println(Integer.toBinaryString(-1)); //11111111...
    • 深入理解负值:

      • 记住32位二进制数的-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
        //负值的输出
        int n = -45;
        System.out.println(Integer.toBinaryString(n)); //以2进制输出
        int m = -11;
        System.out.println(Integer.toBinaryString(m)); //以2进制输出
    • 互补对称现象:-n=~n+1--------取反+1

      -7    = 11111111 11111111 11111111 11111001 = -1-2-4=-7
      ~-7 = 00000000 00000000 00000000 00000110 = 2+4=6
      ~-7+1 = 00000000 00000000 00000000 00000111 = 1+2+4=7 5 = 00000000 00000000 00000000 00000101 = 1+4=5
      ~5 = 11111111 11111111 11111111 11111010 = -1-1-4=-6
      ~5+1 = 11111111 11111111 11111111 11111011 = -1-4=-5 12 = 00000000 00000000 00000000 00001100 = 4+8=12
      ~12 = 11111111 11111111 11111111 11110011 = -1-4-8=-13
      ~12+1 = 11111111 11111111 11111111 11110100 = -1-1-2-8=-12
      //互补对称现象: -n=~n+1
      int n = -7;
      int m = ~n+1;
      System.out.println(m); //7
      int i = 12;
      int j = ~i+1;
      System.out.println(j); //-12
      int a = 2147483647; //int的最大值
      a = a+1;
      System.out.println(a); //-2147483648(int的最小值) int b = -2147483648; //int的最小值
      b = b-1;
      System.out.println(b); //2147483647
  4. 位运算:---------------------了解

    • 取反:~

      • 运算规则:0变1,1变0
    • 与运算:&

      • 运算规则:逻辑乘法,见0则0

        0 & 0 ---------> 0
        0 & 1 ---------> 0
        1 & 0 ---------> 0
        1 & 1 ---------> 1
        n =       00010111 01110101 01111010 11110110----0x17757af6
        m = 00000000 00000000 00000000 11111111----0xff
        k = n&m = 00000000 00000000 00000000 11110110----0xf6 int n = 0x17757af6;
        int m = 0xff; //8位掩码
        int k = n&m;
        System.out.println(Integer.toBinaryString(n));
        System.out.println(Integer.toBinaryString(m));
        System.out.println(Integer.toBinaryString(k));
        如上运算的意义:k中储的是n的最后8位,这种运算叫做掩码运算
        一般从低位开始1的个数称为掩码的位数
    • 或运算:|

      • 运算规则:逻辑加法,见1则1

        0 | 0 ----------> 0
        0 | 1 ----------> 1
        1 | 0 ----------> 1
        1 | 1 ----------> 1
        n       = 00000000 00000000 00000000 11011110  0xde
        m = 00000000 00000000 10011101 00000000 0x9d00
        k = n|m = 00000000 00000000 10011101 11011110 0x9dde int n = 0xde;
        int m = 0x9d00;
        int k = n|m; //将n和m错位合并
        System.out.println(Integer.toBinaryString(n));
        System.out.println(Integer.toBinaryString(m));
        System.out.println(Integer.toBinaryString(k));
    • 右移位运算:>>>

      • 运算规则:将2进制数整体向右移动,低位自动溢出舍弃,高位补0

        n =        01101011 00111111 01011110 00111010----0x6b3f5e3a
        m = n>>>1 00110101 10011111 10101111 00011101
        k = n>>>2 00011010 11001111 11010111 10001110
        g = n>>>8 00000000 01101011 00111111 01011110 int n = 0x6b3f5e3a;
        int m = n>>>1;
        int k = n>>>2;
        int g = n>>>8;
        System.out.println(Integer.toBinaryString(n));
        System.out.println(Integer.toBinaryString(m));
        System.out.println(Integer.toBinaryString(k));
        System.out.println(Integer.toBinaryString(g));
    • 左移位运算:<<

      • 运算规则:将2进制数整体向左移动,高位自动溢出舍弃,低位补0

        n =        01101110 10111100 00111011 00111011-------0x6ebc3b3b
        m = n<<1 11011101 01111000 01110110 01110110
        k = n<<2 10111010 11110000 11101100 11101100
        g = n<<8 10111100 00111011 00111011 00000000 int n = 0x6ebc3b3b;
        int m = n<<1;
        int k = n<<2;
        int g = n<<8;
        System.out.println(Integer.toBinaryString(n));
        System.out.println(Integer.toBinaryString(m));
        System.out.println(Integer.toBinaryString(k));
        System.out.println(Integer.toBinaryString(g));
    • 移位运算的数学意义:

      int n = 5;
      int m = n<<1;
      int k = n<<2;
      int g = n<<3;
      System.out.println(m); //10----相当于5*2
      System.out.println(k); //20----相当于5*4
      System.out.println(g); //40----相当于5*8
      /*
      权: 64 32 16 8 4 2 1
      n: 0 1 0 1 = 5
      m: 0 1 0 1 = 10
      k: 0 1 0 1 = 20
      g: 0 1 0 1 = 40
      */

binary与进制转换的更多相关文章

  1. php进制转换函数

    1 十进制(decimal system)转换函数 ① 十进制转二进制 string  decbin(int number). 参数为一个十进制整型数字,不是整型数字会自动转为整型数字,如'3'转为3 ...

  2. Python内置函数进制转换的用法

    使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Convert an integer numb ...

  3. python 内置函数 进制转换

    4.内置函数 自定义函数 内置函数 len Open id() type() range() 输入输出 print() input() 强制转换 int() float() list() tuple( ...

  4. python进制转换(二进制、十进制和十六进制)及注意事项

    使用内置函数实现进制转换实现比较简单,主要用到以下函数: bin().oct().int().hex() 下面分别详解一下各个函数的使用(附实例) 第一部分:其他进制转十进制 1.二进制转十进制 使用 ...

  5. Erlang 进制转换

    http://www.cnblogs.com/me-sa/archive/2012/03/20/erlang0047.html bnot unary bitwise not integer div i ...

  6. Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)

    使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Convert an integer numb ...

  7. Oracle 中的进制转换

    Oracle 中的进制转换 */--> Oracle 中的进制转换 Table of Contents 1. 进制名 2. 10进制与16进制互相转换 2.1. 10进制转换为16进制 2.2. ...

  8. python中进制转换

    使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Convert an integer numb ...

  9. Bugku-CTF加密篇之进制转换(二进制、八进制、十进制、十六进制,你能分的清吗?)

    进制转换 二进制.八进制.十进制.十六进制,你能分的清吗?

  10. Golang的进制转换实战案例

    Golang的进制转换实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用进制概述 1>.进制概述 进制也就是进位制,是人们规定的一种进位方法.举个例子:二进制就 ...

随机推荐

  1. 链路状态通告类型知识学习总结,LSA(Link State Advertisement)

    链路状态通告类型知识总结,LSA(Link State Advertisement) 一.相关解释,个人相关看法: OSPF是通过LSA数据报文来联系关联路由器,交换信息,同步数据,在此基础上,各路由 ...

  2. python实现web应用程序(1)虚拟环境与Django

    前言 在这个系列博客中,我将使用python实现一个名为"OI笔记"的项目. 1 建立项目目录 第一步,我们先为自己的项目建立一个目录. 首先,打开终端. win+r键,然后输入c ...

  3. List<Object>转为对象

    List<Object> list = new ArrayList<>(); List<BMSQ> bmsqList = (List<BMSQ>)(Li ...

  4. $\bf{X} \bf{X}^T$和$ \bf{X}^T \bf{X}$的非零特征值和特征向量之间的关系

    设\(\lambda_i\)为\(\bf{X} \bf{X}^T\)的特征值,对应的特征向量为\(\mathbf{\alpha}_i\),则 \[\bf{X} \bf{X}^T \mathbf{\al ...

  5. 多线程事务回滚sqlSession, spring-mybatis 开启事务

    @Resource SqlContext sqlContext; /** * 多线程事务. * @param employeeDOList */ @Override public void saveT ...

  6. 我和Java这些年的故事(六)

    从2006年开始,我就在建设自己的网站,从2008年到2011年,我托管了四年自己的服务器,那时阿里云还没有兴起,只能自己买服务器,放到托管商机房里去,他们给你一个IP.机器全部是自己运维. IBM内 ...

  7. 记一次在MyBatis-Plus中 @TableField 自动填充中遇见的坑

    先放一张表生成策略对应的结果 值 描述 DEFAULT 默认不处理 INSERT 插入时填充字段 UPDATE 更新时填充字段 INSERT_UPDATE 插入和更新时填充字段 此处需要注意一下,如果 ...

  8. Java-Maven实现简单的文件上传下载(菜鸟一枚、仅供参考)

    1.JSP页面代码实现 <%@ page language="java" contentType="text/html; charset=UTF-8" p ...

  9. 招新题流程简介(WS2812)

    22物电科协软件招新题学习流程 有错误或者不当的地方请在评论区指出 题目简介 使用stm32驱动单一ws2812b灯珠实现呼吸灯效果,驱动及实现方法不限 演示效果 快速入门,在stm32核心板上点灯 ...

  10. Git,GitHub与GitLab的区别

    Git是一种版本控制系统,是一种工具,用于代码的存储和版本控制. GitHub是一个基于Git实现的在线代码仓库,是目前全球最大的代码托管平台,可以帮助程序员之间互相交流和学习. GitLab是一个基 ...