我正在尝试解决codefights中的问题,浏览网页后,我找到了这个解决方案。但我不清楚它是如何工作的。
a * (a & 1) ^ b * !(b & 1) ^ !!(((a ^ b) + 1) & 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)">
×</button><p class="top_min_10">Call</p>
</div>
</div>
则为0是偶数。
答案 1 :(得分:-1)