01.02 笔记-二进制及位运算

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

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

什么是补码


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 笔记-二进制及位运算)