zoukankan      html  css  js  c++  java
  • 位运算基础和实战要点

    位运算符

    含义 运算符 示例
    左移 << 0011 => 0110
    右移 >> 0110 => 0011
    按位或 | 0011 | 1011 => 1011
    按位与 & 0011 & 1011 => 0011
    按位取反 ~ 0011 => 1100
    按位异或(相同为零不同为一) ^ 0011 ^ 1011 => 1000

    XOR - 异或

    异或:相同为 0,不同为1。也可用 “不进位加法” 来理解

    异或操作的一些特点:

    • x ^ 0 = x
    • x ^ 1s = ~x // 注意 1s = ~0(全1) 结果等于 x 取反
    • x ^ (~x) = 1s (全一)
    • x ^ x = 0
    • c = a ^ b => a ^ c = b, b ^ c = a // 交换两个数
    • a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c // associative

    指定位置的位运算

    1. 将 x 最右边的 n 位清零:x & (~0 << n)
    2. 获取 x 的第 n 位值(0 或者 1):(x >> n) & 1
    3. 获取 x 的第 n 位的幂值:x & (1 << (n - 1))
    4. 仅将第 n 位置为 1:x | (1 << n)
    5. 仅将第 n 位置为 0:x & (~(1 << n))
    6. 将 x 最高位至第 n 位(含)清零:x & ((1 << n) - 1)
    7. 将第 n 位至第 0 位(含)清零:x & (~((1 << (n + 1)) - 1))

    实战位运算要点

    • 判断奇偶

      x % 2 == 1 => (x & 1) == 1

      x % 2 == 0 => (x & 1) == 0

    • x >> 1 ----> x / 2

      即:x = x / 2; => x = x >> 1;

      ​ mid = (left + right) / 2; => mid = (left + right) >> 1;

    • X = X & (X - 1) 清零最低位的1

    • X & -X => 得到最低位的1(-X是在X的值的基础上进行按位取反(~X)之后在增加1所得)

    • X & ~X => 0

  • 相关阅读:
    前端开发小结(持续更新)
    UDP 通讯及内部分析(合集)
    困扰我三天的问题
    Clang Format Style Options (.clang-format 配置文件文档)
    关于共享库的那些事儿
    如何在VMWare的NAT模式下使用traceroute(解析vmnat的行为)
    Linux网络配置
    Ansible Ad-Hoc命令集
    Ansible基础使用
    Ansible部署及配置介绍
  • 原文地址:https://www.cnblogs.com/flypig666/p/14552612.html
Copyright © 2011-2022 走看看