小さいサイズのタイプから大きいサイズにキャストすると、データが失われることはありませんが、データの容量が増えます。
大きいサイズのタイプから小さいサイズにキャストすると、はのデータが失われる可能性がありますが、データの容量は少なくなります。
は、私が9までの数字0を保持できる大きさの箱と私は番号を保存したい場合は99
に番号0を保持できる大きさの別のボックスを持っているふり7;両方のボックスが動作しますが、大きなボックスを使用するとスペースが残ってしまいます。小さい箱から大きい箱に何の問題もなく値を移すことができました。
番号42を保存する場合は、 1つのボックスだけがその番号に適合することができます。番号を取って小さなボックスで詰め込もうとすると、何かが失われます。通常は番号の上部にあります。この場合、私の42はに変換されます!おっとっと!
さらに、署名済みおよび署名なしが役割を果たします。符号付き2進数の場合、最上位ビットは数値の符号を示します。符号付きの数値と符号なしの数値の間でキャストすると、その値を誤って解釈している可能性があります。それは42のような数字が-48になることを意味するかもしれません!この特定場合
、それはもう少し複雑です。 A usize
は "ポインタサイズの整数"であることが定義されています。通常、これはマシンのネイティブサイズです。 64ビットx64プロセッサでは、usize
は64ビット、32ビットx86プロセッサでは32ビットとなります。
キャストするusize
からi32
は、実行しているマシンのタイプによって異なります。あなたが試したコードが構文的に正しくないため
エラーメッセージあなたが得るであり、コンパイラが良いのエラーメッセージを与えていません。
は、あなたは本当に優先順位が適切に適用されるのに役立ちます
while (ar.len() as i32) < size { }
かっこを入力します。安全のために
、私は大きな値にキャストしたい:
while ar.len() < size as usize { }
優れたデザインは、おそらく最初の場所で 'size'タイプの' usize'を作ることであろう。 – starblue