美文网首页
01.02 笔记-二进制及位运算

01.02 笔记-二进制及位运算

作者: xxxQinli | 来源:发表于2019-01-02 17:25 被阅读0次

计算机存数据只能存数字数据,而且是二进制的补码

计算机对数据进行运算的时候使用补码进行运算的,将数据从计算机中读出来,显示的是原码

什么是补码


1. 原码

  • 符号位+真值
  • 说明
    • 符号位:最高位用0表示正数,用1表示负数

    • 真值:去掉正负符号后,数字对应的二进制

      • X(符号位) XXXXXXX XXXXXXXX(值,2的十五次方减一)
      • 求二进制的值加符号位就是原码
        100的原码:0 1100100
        -100的原码:1 1100100

2. 反码

  • 负数的反码:原码的符号位不变,其余的位数取反,0变1,1变0
  • 正数的反码就是它本身,原码
    • 100的反码:0 1100100
    • -100的反码:1 0011011
  • 反码的存在就是为了算补码

3. 补码

  • 正数的补码:原码
  • 负数的补码:反码加1
    • 100的补码:0 1100100
    • -100的补码:1 0011100

练习: -50的原码、反码、补码

原码:1110010

反码:1001101

补码:1001110

为什么要存补码,因为计算机里只有加法器,没有减法器


位运算:

&(按位与) |(按位或)~(按位取反)^(按位异或)>>(右移) <<(左移)

参与运算的都是补码,位运算的执行效率要高很多

  1. 与运算 &
    数字1 & 数字2 - 有0就是0
    参与运算的都是补码:0111 & 1101 --> 每一位上分别与 若都为1,则为1,有一个是0,就是0,0101
    特点:一个位上的数如果和1与,可以保留这个数,和0与,可以置0
  • 应用:判断一个数的奇偶性,二进制最后一位是否是1,是1位奇数,是0为偶数,比一般的效率高
    num % 2 == 0 ---> 偶数 普通方法
    num & 1 == 1 ---> 奇数 效率高的方法
    num & 1 == 0 ---> 偶数 效率高的方法
  1. 或运算 |
    只要有1,就是1
    1 | 1 = 1
    1 | 0 = 1
    0 | 1 = 1
    0 | 0 = 0
  • 特点:和1或就是1,与0或与0
  1. 取反 ~
    ~ 数字
    ~ 1 ----> 0
    ~ 0 ----> 1
    补码取反,要反着求回原码
    去反两次等于本身,连续两个波浪号

  2. 异或^
    相同为0,不同为1
    1 ^ 1 = 0
    1 ^ 0 = 1
    0 ^ 1 = 1
    0 ^ 0 = 0

  • 应用:设密码,将密码与另一个值异或,得到另外的值
    异或两次得到原来的值
  1. 左移<< 右移>>
    数字1 << N, 数字1左移N位
    数字1 >> N, 数字1右移N位
  • 规律:左移是*,数字1 * (2 ** N),右移动是/ 数字1 // (2 ** N)
  • 应用:快速乘2的次方,快速除2的次方,比乘除效率高
    4 << 1 = 8
    -3 << 2 = -12
    5 >> 2 = 1

相关文章

  • 01.02 笔记-二进制及位运算

    计算机存数据只能存数字数据,而且是二进制的补码 计算机对数据进行运算的时候使用补码进行运算的,将数据从计算机中读出...

  • Java学习笔记-第一天

    位运算符 位运算是直接对二进制进行运算. 异或运算(^):相同二进制位进行运算,结果是0.不相同二进制位运算结果是...

  • LeetCode191——位1的个数(位运算)

    位运算基础 位运算基于整数的二进制表示进行运算。由于计算机内部就是以二进制来存储数据,因此位运算会很快。基本的位运...

  • Java--位运算符

      位运算指的是进行二进制位的运算,常用的位运算符如下所示。 位运算符   说明~       取反&     ...

  • 【初识C语言】位运算符

    位运算符 位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这...

  • 算法总结-位运算

    位运算符用于二进制运算 与运算 & 二进制数 n & 1 的结果为n的末位 异或运算 ^ 长度为 L 的二进制数 ...

  • Java基础-位运算

    1-1 Java基础-位运算什么是位运算?一个字节=8位二进制1k=1024字节1k=1024*8位二进制 位运算...

  • Java 位运算符

    位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。位运算符主要针对两个二进制数的位进行逻辑运算。...

  • C语言08- 位运算,宏定义,递归

    16:位运算 16.1:位运算概述 二进制与位运算 16.2:与(and):& 与运算:只有当2个数对应的位都为1...

  • 2018-06-20 逻辑运算符

    逻辑运算符 Boolean类型运算时如下: 数值类型运算, 位运算符: 位运算时,是以二进制位来计算 ~是按位取反...

网友评论

      本文标题:01.02 笔记-二进制及位运算

      本文链接:https://www.haomeiwen.com/subject/ecxtrqtx.html