最近在学习算法,发现大佬写的代码中凡是涉及到位运算的,我都一脸懵逼,所以我就找了一些常见的位运算替换操作。
至于为什么用位运算呢?因为位运算可以直接对二进制进行操作,不仅可以节约内存,还可以使程序运行速度更快。
其实就是为了简化代码,提高效率,简化计算
下面就是一些常见操作:
i / 2 | i >> 1 |
i * 2 | i << 1 |
i / 2 ^ k | i >> k |
i * 2 ^ ki 乘以(2的k次方) | i << k |
i % 2(判断奇偶) | i & 1 |
i&(i-1)(清除i的二进制表示中最后一个1) | i &= (i - 1) |
i |= (i + 1) | |
i^=j; j^=i; i^=j; | 交换i和j的值,无需使用额外的变量 |
(x >> i & 1) == 0 ? y : z | 如果x的二进制表示的第i位是0,返回y,否则返回z |
n & ( n - 1) | 判断 n 是不是 2 的幂,结果为0,表示true |
n >> (k - 1) & 1 | 取整数n的二进制表示中第k位的值 |
还有一个是在for循环中,判断条件是i>=0的话,可以使用~i表示,但可能会出现一些错误
若发现错误,请指出,谢谢
PS:这些位运算替换操作可以更高效地实现一些功能,提高程序效率。但需要注意的是,在某些情况下,位运算可能会导致代码可读性降低,而且需要小心处理位运算的溢出情况。