& in (a & 1) 的目的是什么

What is the purpose of & in (a & 1)

我正在尝试解决codefights中的问题,在浏览网络后,我发现了这个solution.But我不清楚它是如何工作的。

    a * (a & 1) ^ b * !(b & 1) ^ !!(((a ^ b) + 1) & 2)

单个&是按位与,这意味着结果是在运算符左侧和右侧设置的位。

作为示例 15 & 7 或以二进制表示:

1111
&
0111

按位 AND 将产生一个设置了公共位的数字:

1111 & 0111 = 0111

当您进行 (a & 1) 时,您正在测试是否设置了最低有效位 (lsb),因为您正在执行这样的测试:

a
&
00000001

如果 a 的位值:00000110 那么结果将为 0,因为没有设置公共位,如果 a 的位值:00000111 那么结果将为 1因为 lsb 设置在 a.

这个是针对不同的情况使用的,如果设置了lsb就知道这个数是奇数,所以这个测试真的是这个数是不是奇数(1, 3, 5, 7, ...) .

查看您的解决方案的第一部分:a * (a & 1) 您将 a 乘以(记住 0 或 1)的值,如果 a 为奇数,则为 1,如果为 0如果是偶数。

这里的&是位运算符(作用于位并执行逐位运算)。更多细节见this and this