为何LLVM中i64类型AND运算未返回1?附示例代码
LLVM i64按位与运算结果不符合预期的问题解决
你混淆了**按位与(AND)**的运算规则,LLVM IR中的and指令是严格的按位操作,不是你预期的其他运算逻辑。
先看你的代码:
define i64 @main() { %1 = and i64 5, 5 ret i64 %1 }
5的二进制是0b101,两个5执行按位与运算时,每一位对应计算:
- 第0位:1 & 1 = 1
- 第1位:0 & 0 = 0
- 第2位:1 & 1 = 1
最终结果是0b101,也就是十进制的5,这是and指令的正确行为。
如果期望得到结果1,需要根据实际需求替换成对应指令:
- 若要取数值的最低位(保留最后一位1):
define i64 @main() { %1 = and i64 5, 1 ret i64 %1 }
- 若要判断两个数值是否相等并返回1(模拟逻辑与的布尔结果):
define i64 @main() { %1 = icmp eq i64 5, 5 %2 = zext i1 %1 to i64 ret i64 %2 }
内容的提问来源于stack exchange,提问作者Kashikoi Clev-san
相关产品推荐
相关产品推荐

