gpt4 book ai didi

rust - 从 `i32` 转换到 `usize` 与其他方式有什么区别?

转载 作者:行者123 更新时间:2023-11-29 08:01:35 33 4
gpt4 key购买 nike

我正在创建一个函数,该函数生成一个大小为 n 的随机数数组,但我暂时的比较会引发错误。

while ar.len() as i32 < size { }

投诉:预期!之一, ( , + , , , :: , < , 或 > , 发现 { .

如果我删除 as i32它提示 mismatch types如果我添加 as usize到 size 变量然后它不会提示。

最佳答案

当您从较小的类型转换为较大的类型时,您不会丢失任何数据,但数据现在会占用更多空间。

当您从较大的类型转换为较小的类型时,您可能会丢失一些数据,但数据占用的空间会更少。

假设我有一个大小为 1 的盒子,可以容纳数字 0 到 9,还有一个大小为 2 的盒子,可以容纳数字 0 到 99。

如果我想存储数字7;两个盒子都可以用,但如果我使用更大的盒子,我会剩下空间。我可以毫不费力地将值从较小的盒子移动到较大的盒子。

如果我想存储数字42;只有一个盒子可以容纳这个数字:较大的那个。如果我试着把数字塞进较小的盒子里,就会丢失一些东西,通常是数字的上半部分。在这种情况下,我的 42 会变成 2!糟糕!

另外signed和unsigned也有作用;当您在有符号数和无符号数之间进行转换时,您可能会错误地解释该值,因为像 -1 这样的数字会变成 255!

另见:



在这个特殊的案例中,情况要复杂一些。 usize 被定义为“指针大小的整数”,通常是机器的 native 大小。在 64 位 x64 处理器上,这意味着 usize 是 64 位,而在 32 位 x86 处理器上,它将是 32 位。

因此,将 usize 转换为 i32 的操作将根据您运行的机器类型而有所不同。


您收到的错误消息是因为您尝试的代码在语法上不正确,并且编译器没有给出正确的错误消息。

你真的很想打字

while (ar.len() as i32) < size { }

括号将有助于正确应用优先级。

为了安全起见,我会选择更大的值:

while ar.len() < size as usize { }

另见:

关于rust - 从 `i32` 转换到 `usize` 与其他方式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39622633/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com