位运算简介

位运算,是操作二进制位的操作

常见的位运算符

  • 与(&):两个操作数的对应位都为1时,结果才为1,否则为0。

    0101 (5)

    &0011 (3)


    0001

  • 或(|):两个操作数的对应位只要有一个为1,结果就为1。

  • 异或(^):两个操作数的对应位不同时,结果为1;相同则为0。

  • 非(~):将操作数的每一位取反。

  • 左移(«):将操作数的二进制表示向左移动指定的位数,右边补0

  • 右移(»):将操作数的二进制表示向右移动指定的位数,左边补符号位(对于无符号数,补0)。

应用

快速计算

比如右移一位代替除 2,左移一代替乘2

%E6%88%AA%E5%B1%8F2025-01-05_17.03.52.png

权限管理

利用位来表述不同的权限,进行权限的的检查和设置

比如:1«0 表示读取权限

1«1 表示写入权限

1«2 表示操作权限

在游戏开发中,在表示角色受到的 buff 时,也可以利用位来表示 buff。

加密解密

许多的加密算法,如DES、AES等,都使用了位运算。

其它

其实我们日常用的最多的还是下面这些

  • 判断奇偶

    if (n & 1) {
        // 奇数
    } else {
        // 偶数
    }
    /**
    *举个例子,比如 n 为 5,那么 n 的二进制数为:
    *101 ,和 1 也就是 001 与为 001 ,不为 0 所以为 True,只要二进制数的最后一位为 1 一定是偶数。
    */
    
  • 交换两个数

    a ^= b;
    b ^= a;
    a ^= b;
    

优点

  • 效率高:位运算通常比高级语言中的操作更快,因为它们直接操作硬件层面的数据。
  • 空间节省:可以用一个整数的位来表示多个布尔值或状态,节省内存。