与其他比 asm 级别更高的语言(如 Java)一样,我想转换值、比较它等等。
例如像这样填充数组:
var array: [10]i32 = undefined;
for (0..array.len) |i|
array[i] = i;
但是编译器说:
C:\Zig\projects\test\src>zig run main.zig
main.zig:7:20: error: expected type 'i32', found 'usize'
array[i] = i;
^
main.zig:7:20: note: signed 32-bit int cannot represent all possible unsigned 64-bit values
referenced by:
callMain: C:\Zig\lib\std\start.zig:585:32
initEventLoopAndCallMain: C:\Zig\lib\std\start.zig:519:34
remaining reference traces hidden; use '-freference-trace' to see all reference traces
我不知道如何解决这个问题,因为之前所有的方法都不起作用。我还需要 u32 到 i32、f32 到 i32 等等。请帮助我
您需要使用
@intCast
显式地将数字转换为较小的类型。
var array: [10]i32 = undefined;
for (0..array.len) |i|
array[i] = @intCast(i);
请记住,如果您使用
@intCast
并且数字不适合较小的类型,它将触发未定义的行为。