30
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rustの数値型をマスターしたい(Part1)

Last updated at Posted at 2022-02-09

昨年からRustを学んでいるのですが、Rustは数値型が複雑で、今はまだなんとなく使うことしかできていません。そこで、Qiitaでのアウトプットを通じて、Rustの数値型をマスターしていきたいと思います。

今回の内容

  • 数値型一覧
  • 数値型の選び方

数値型一覧

まず、Rustには使える数値型がいくつかあります。

頭についているアルファベット(uif)は数値の種類を表します。

  • u => 符号なし整数(unsigned integer)
    • つまり、自然数と0
  • i => 符号あり整数(signed integer)
    • つまり、整数(プラスもマイナスも)
  • f => 浮動小数点(floating point)
    • つまり、小数
    • 浮動小数点には、表現できる正確さに限界があります。
    • その点については、今後の記事でまとめたいと思います。

その後ろの数字は、そのデータの大きさであるビット数を表しています。
それらを組み合わせると、以下のような範囲の数値を表現する型となります。

符号なし整数(unsigned integer)

最小値 最大値
u8 0 255
u16 0 65535
u32 0 4294967295
u64 0 18446744073709551615
u128 0 340282366920938463463374607431768211455

符号あり整数(signed integer)

最小値 最大値
i8 -128 127
i16 -32768 32767
i32 -2147483648 2147483647
i64 -9223372036854775808 9223372036854775807
i128 -170141183460469231731687303715884105728 170141183460469231731687303715884105727

浮動小数点(floating point)

最小値 最大値
f32 -3.4028235e38 3.4028235e38
f64 -1.7976931348623157e308 1.7976931348623157e308

※e38やe308というのは、10の38乗倍や10の308乗倍の事です。
(例)1.23e5 => 123000

usize、isize

このほかにusize、isizeという型があり、それぞれマシンのビット数に依存します。
(例)64ビットマシンならusize=>u64、isize=>i64
参考:Numeric types - The Rust Reference
参考:Rust - 基本的なデータ型について

数値型の選び方

数値型を選ぶ際の観点

調べてみたところ、以下のような観点が数値型を選ぶ際の基準となりそうです。

動作効率に関する観点

その他の観点

  • Vecや配列などのインデックスとして使用する場合=>usize かisizeを利用

    • 公式ドキュメントでは、isizeも使えると記載されているのですが、isizeは使えず、usizeだけとなっているようです。(2022/2/12追記)

the type [u32] cannot be indexed by isize
slice indices are of type usize or ranges of usize
help: the trait std::slice::SliceIndex<[u32]> is not implemented for isize
note: required because of the requirements on the impl of std::ops::Index<isize> for [u32]rustc(E0277)
```
※インデックスにisizeを使用した場合のエラーメッセージ(Rustのv1.56.1で確認)

  • 浮動小数点型については、f32を使う場合は以下の通り、限定的
    • メモリ消費を最大限減らしたい場合
    • double-precisionがサポートされていない環境
    • single-precisionの方が処理速度が速い環境

数値型を選ぶ際のフローチャート

上記の観点を、フローチャートにまとめました。
まだまだ学習中の個人の意見ですので、ご意見等あれば、コメントいただけると大変嬉しいです。

フローチャート①

フローチャート②(ビット数の決め方)

まとめ

冒頭でも述べた通り、Rustの数値型はまだまだ奥が深いですが、今回の記事はここまでで区切り、次回以降の記事で以下の内容をまとめていきたいと思います。

  • float型の説明
  • オーバーフロー・アンダーフローについて
  • 型変換の仕方
  • 整数リテラル・バイトリテラルについて
  • 数値型が持つ共通のメソッド
30
12
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?