这段Rust代码如何判断数字奇偶性?请分步解析其原理
解析Rust代码:偶数返回1、奇数返回-1的高效实现
这段代码1 - ((num & 1) << 1) as i32可以快速判断数字奇偶性,偶数返回1,奇数返回-1,且因为全程用位运算实现,指令数更少、执行效率更高。下面分步拆解它的工作原理:
步骤1:提取最低位判断奇偶性
num & 1是按位与操作:
- 二进制中,所有偶数的最低位都是0,奇数的最低位都是1
- 按位与1时,只有最低位会保留,其余位都会被置0
- 结果:偶数得到0,奇数得到1
步骤2:左移一位放大结果
(num & 1) << 1是左移一位操作:
- 左移一位相当于把数值乘以2
- 第一步得到的0左移后还是0,1左移后变成2(二进制
10)
步骤3:类型转换保证运算一致性
((num & 1) << 1) as i32将左移后的结果转为i32类型,确保后续和整数1做减法时类型匹配,避免隐式转换可能带来的问题。
步骤4:计算最终结果
1 - [前面的结果]分两种情况:
- 若num是偶数:
1 - 0 = 1,符合预期返回值 - 若num是奇数:
1 - 2 = -1,符合预期返回值
为什么这个实现更高效?
位运算直接在CPU的寄存器层面执行,不需要条件分支(比如if num % 2 == 0这类判断会产生分支预测开销),也不需要取模运算的额外指令,所以生成的机器码更少,执行速度更快。
内容的提问来源于stack exchange,提问作者Naitik Mundra
相关产品推荐
相关产品推荐

