虽然该代码是显示正在发生的事情的绝佳方式,但我通常不会使用这样的代码。如果必须要快,通常会有更快的解决方案,例如在 x86 上使用 SSE 或在 ARM 上使用 NEON。如果这些都不可用,当然,我会使用它,只要它有帮助并且是必要的。
顺便说一下,我在这个答案中解释了它是如何工作的
像 Skylion 一样,我经常使用的一件事是弄清楚一个数字是否是 2 的幂。想一想你会如何做到这一点..然后看看这个:(x & (x - 1)) == 0 && x != 0
我想你第一次看到它时会很棘手,但是一旦你习惯了它,它就会比任何不使用位数学的替代方案简单得多。它之所以有效,是因为从数字中减去 1 意味着借位从数字的最右端开始并贯穿所有零,然后在第一个变成零的 1 处停止。将该数字与原始数字进行与运算,然后使最右边的 1 为零。2 的幂只有一个 1,它消失了,留下零。所有其他数字将至少有一个 1,除了零,这是一种特殊情况。一个常见的变体不会测试零,并且可以将其视为 2 的幂,或者知道不会发生零。
同样,您可以使用 bitmath 轻松完成其他一些事情,但如果没有它就不会那么容易。正如他们所说,为工作使用正确的工具。有时位数学是正确的工具。