You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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. 若要取数值的最低位(保留最后一位1):
define i64 @main() {
%1 = and i64 5, 1
ret i64 %1
}
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:48:21