&的目的是什么?在(a& 1)

时间:2016-11-08 11:17:17

标签: c++ bitwise-operators

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

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

2 个答案:

答案 0 :(得分:4)

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

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

1111
&
0111

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

1111 & 0111 = 0111

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

a
&
00000001

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

这用于不同的情况,如果设置了lsb,你知道这个数字是奇数,所以这个测试实际上是数字是否是奇数(1,3,5,7,...)。 / p>

查看解决方案的第一部分:a * (a & 1)您将a乘以(0或1记住)的值,如果a为奇数,则为1,如果为 <div class="row height_380_div" id="target_div_id" ondragover="drag_over(event)" ondrop="drop(event)"> <div ondragstart="dragStart(event)" class="alert alert-warning col-lg-12 height_30_div node" draggable="true" id="call" name="Call" > <button class="close top_min_10 hidden call_btn" data-dismiss="alert" onclick="remove_btn(this)"> &times;</button><p class="top_min_10">Call</p> </div> </div> 则为0是偶数。

答案 1 :(得分:-1)

此处&是一个按位运算符(处理位并执行逐位运算)。有关详细信息,请参阅thisthis