使用位运算判断两个int256数任意一个为奇数的更快方案
答案
存在运算速度更快、gas消耗更低的实现,逻辑完全兼容你当前的需求。
你原有逻辑的本质是提取两个数的最低位(奇偶位)做异或运算,而异或运算的最低位仅由两个操作数的最低位决定,和高位无关,同时int256采用补码存储,正负值的最低位都可以直接表示奇偶性,因此可以简化为先对x、y整体做异或,再取最低位即可:
let z := and(xor(x, y), 1)
效率对比
- 原有实现需要3次EVM运算:2次
and+ 1次xor - 优化后实现仅需要2次EVM运算:1次
xor+ 1次and
两者的输出结果完全一致,无需额外处理边界条件,所有int256取值范围内的输入都能正常得到正确结果。
内容的提问来源于stack exchange,提问作者Paul Razvan Berg
相关产品推荐
相关产品推荐

