// dictionary
整数型.
整数を表すプリミティブ型です。
符号の有無で符号あり整数と符号なし整数に分かれ、ビット幅ごとに複数の型があります。
| 長さ | 符号あり | 符号なし |
|---|---|---|
| 8ビット整数 | i8 |
u8 |
| 16ビット整数 | i16 |
u16 |
| 32ビット整数 | i32 |
u32 |
| 64ビット整数 | i64 |
u64 |
| 128ビット整数 | i128 |
u128 |
| アーキテクチャ依存 | isize |
usize |
fn main() {
let stock: u32 = 15; // 在庫数(負にならないのでu32)
let temperature: i32 = -3; // 気温(負の値もあるのでi32)
println!("在庫: {}個, 気温: {}度", stock, temperature);
}Playgroundで開く変数初期化時のデフォルト型
変数の宣言などで型注釈や周囲の文脈から型が一意に定まらない整数リテラルは、i32 がデフォルトとして採用されます。
そのほかのデフォルト型は型推論のページをご確認ください。
補足
オーバーフロー時の挙動
通常の変数同士の演算がオーバーフローすると、デバッグビルドでは実行時にパニックしますが、リリースビルドでは2の補数によるラッピング(範囲の反対側へ折り返す)動作になります(-C overflow-checks フラグで挙動を制御可能)。一方、定数のようにコンパイル時に値が確定する式では、実行モードに関わらずオーバーフローがコンパイルエラーになります。
fn main() {
const MAX: u8 = u8::MAX;
const OVER: u8 = MAX + 1; // エラー: E0080(定数評価中のオーバーフロー)
println!("{}", OVER);
}Playgroundで開くisize / usizeの主な用途
usize はコレクションの要素数やインデックス、メモリ上のサイズを表すのに使われる型で、Vec::len() の戻り値などが該当します。isize はポインタ同士の差分など、負の値も取りうるサイズ計算に使われますが、登場頻度は usize よりずっと低いです。
この辞書が使われているページ
backlinks 12