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

use*_*015 -4 c++ bitwise-operators

我正在尝试解决 codefights 中的问题,浏览网络后,我找到了这个解决方案。但我不清楚它是如何工作的。

    a * (a & 1) ^ b * !(b & 1) ^ !!(((a ^ b) + 1) & 2)
Run Code Online (Sandbox Code Playgroud)

Tom*_*sen 6

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

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

1111
&
0111
Run Code Online (Sandbox Code Playgroud)

按位与将产生具有公共位集的数字:

1111 & 0111 = 0111
Run Code Online (Sandbox Code Playgroud)

当您创建时,(a & 1)您正在测试是否设置了最低有效位(lsb),因为您正在执行如下测试:

a
&
00000001
Run Code Online (Sandbox Code Playgroud)

如果a按位值:00000110,则结果将为 0,因为没有设置公共位;如果按a位值:00000111,则结果将为 1,因为 lsb 设置在 a 上。

这用于不同的情况,如果设置了 lsb,您就知道该数字是奇数,因此此测试实际上是该数字是否为奇数(1、3、5、7,...)。

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