当您从较小尺寸的类型转换为较大尺寸的类型时,您不会丢失任何数据,但数据现在将占用更多空间。
当您从较大尺寸的字体转换为较小尺寸的字体时,您might丢失一些数据,但数据占用的空间会减少。
假设我有一个大小的盒子1可以容纳数字 0 到 9 和另一个大小的盒子2可以保存数字 0 到 99。
如果我想存储数字7;两个盒子都可以使用,但如果我使用较大的盒子,我会有剩余空间。我可以毫无问题地将值从较小的盒子移动到较大的盒子。
如果我想存储数字42;只有一个盒子可以容纳这个数字:较大的那个。如果我尝试取出号码并将其塞入较小的盒子中,则会丢失一些东西,通常是号码的上部。在这种情况下,我的 42 将变成2! Oops!
另外,有符号和无符号也有作用;当您在有符号和无符号数字之间进行转换时,您可能会错误地解释该值,因为像 -1 这样的数字会变成 255!
也可以看看:
- 如何安全且惯用地在数字类型之间进行转换? https://stackoverflow.com/q/28273169/155423
In this 特别的情况,有点复杂。 Ausize
被定义为“指针大小的整数”,通常是机器的本机大小。在 64 位 x64 处理器上,这意味着usize
是 64 位,在 32 位 x86 处理器上,它将是 32 位。
铸造一个usize
to a i32
因此,根据您运行的机器类型,操作会有所不同。
The 错误信息您得到的结果是因为您尝试的代码在语法上不正确,并且编译器没有给出良好的错误消息。
你确实想输入
while (ar.len() as i32) < size { }
括号将有助于正确应用优先级。
为了安全起见,我会转换为更大的值:
while ar.len() < size as usize { }
也可以看看:
- 如何使用 TryFrom 将 usize 转换为 u32? https://stackoverflow.com/q/50437732/155423
- 如何在 u32 和 usize 之间进行惯用转换? https://stackoverflow.com/q/43704758/155423
- 为什么允许使用“as”从 u64 到 usize 进行类型转换,但不允许使用“From”? https://stackoverflow.com/q/47786322/155423