我在reddit上发现了这段代码此代码对偶数返回1,对奇数返回-1。它比other方法计算同样的东西需要更少的指令,而且可能相当快。那么,它是如何工作的?(一步一步的分解会很有帮助)注意:我找到了What is the fastest way to find if a number is even or odd?,但也不明白它是如何工作的。
enxuqcxy1#
让我们从里到外来分析一下。1.第一个月这将使用逐位与“屏蔽”除最低有效位之外的所有位。由于最低有效位是“1”位,因此如果数字是奇数,则其计算结果为1;如果数字是偶数,则其计算结果为0。
1
0
(result1) << 1
num
2
(result2) as i32
1 - 0
1 - 2
-1
1条答案
按热度按时间enxuqcxy1#
让我们从里到外来分析一下。
1.第一个月
这将使用逐位与“屏蔽”除最低有效位之外的所有位。由于最低有效位是“1”位,因此如果数字是奇数,则其计算结果为
1
;如果数字是偶数,则其计算结果为0
。(result1) << 1
此操作将左移1位。这具有乘以2的效果。如果
num
为奇数,则此操作将计算为2
,如果num
为偶数,则仍计算为0
。(0 * 2 = 0)(result2) as i32
这会将得到的无符号整数(
2
或0
)转换为有符号整数,允许我们在下一个操作中减去它。这只适用于编译器,对内存中的值没有影响。1
减去前一个数字,如果num
是偶数,我们得到1 - 0
,得到1
,如果num
是奇数,我们得到1 - 2
,得到-1
。