位运算简介
位运算,是操作二进制位的操作
常见的位运算符
-
与(&):两个操作数的对应位都为1时,结果才为1,否则为0。
0101 (5)
&0011 (3)
0001
-
或(|):两个操作数的对应位只要有一个为1,结果就为1。
-
异或(^):两个操作数的对应位不同时,结果为1;相同则为0。
-
非(~):将操作数的每一位取反。
-
左移(«):将操作数的二进制表示向左移动指定的位数,右边补0
-
右移(»):将操作数的二进制表示向右移动指定的位数,左边补符号位(对于无符号数,补0)。
应用
快速计算
比如右移一位代替除 2,左移一代替乘2
权限管理
利用位来表述不同的权限,进行权限的的检查和设置
比如: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;
优点
- 效率高:位运算通常比高级语言中的操作更快,因为它们直接操作硬件层面的数据。
- 空间节省:可以用一个整数的位来表示多个布尔值或状态,节省内存。