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

如何在Zig中相加会溢出的小整数并存储到更大类型变量中?

Zig中窄整数相加转宽整数的标准实现方式

你的问题出在两个关键点:

  • 新版Zig的@intCast必须显式指定目标类型,无法再通过变量上下文自动推导;
  • 直接计算a + b会先在u4类型范围内运算,0b1101+0b0101=18,超出u4的最大值15,触发溢出错误。

标准实现代码

正确的做法是先将每个窄整数单独转换为目标宽整数类型,再执行加法:

const a: u4 = 0b1101;
const b: u4 = 0b0101;
const c: u5 = @intCast(u5, a) + @intCast(u5, b);

补充说明

  • @intCast(u5, a) 明确告知编译器要把u4类型的a转换为u5类型,对b做同样处理;
  • 两个u5类型的值相加,结果类型也是u5,既不会溢出,也能直接匹配c的类型声明。

你也可以利用Zig的类型推导简化代码,省略c的类型声明:

const a: u4 = 0b1101;
const b: u4 = 0b0101;
const c = @intCast(u5, a) + @intCast(u5, b);

内容的提问来源于stack exchange,提问作者run_the_race

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:12:05