如何在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
相关产品推荐
相关产品推荐

