integerは、小数部分を持たない数値です。
Cairoでは、整数の型宣言は、その値を格納するためにプログラマーが使えるビット数を示します。
符号なし整数は、正の数と0(ゼロ)だけを表せます。これは、配列のインデックスやメモリ管理など、特定のプログラミングの場面で役立ちます。
Cairoは、iという接頭辞で始まる符号付き整数もサポートしています。
これらの整数は正の値と負の値の両方を表せ、サイズはi8からi128まであります。
それぞれの符号付きの型は、$-2^{n-1}$から$2^{n-1} - 1$までの数値を格納できます(両端を含む)。ここで$n$は、その型が使うビット数です。
たとえば、i8は$-2^7$から$2^7 - 1$までの数値、つまり$-128$から$127$を格納できます。
| 長さ | 符号なし | 符号付き |
|---|---|---|
| 8ビット | u8 | i8 |
| 16ビット | u16 | i16 |
| 32ビット | u32 | i32 |
| 64ビット | u64 | i64 |
| 128ビット | u128 | i128 |
| 256ビット | u256 | ------ |
usizeという特別な整数型もあります。これは現在のところ、単にu32の別名です。
この型は、CairoをMLIR(Multi-Level Intermediate Representation)にコンパイルできるようになれば、将来より独自の役割を担うかもしれません。
整数リテラルは、以下の表に示すいずれの形式でも書けます。
複数の数値型になりうる数値リテラルでは、57_u8のように型接尾辞を付けて型を指定できることに注意してください。
また、コードを読みやすくするために、数値リテラルに視覚的な区切り_を使うこともできます。
| 数値リテラル | 例 |
|---|---|
| 10進数 | 98222 |
| 16進数 | 0xff |
| 8進数 | 0o04321 |
| 2進数 | 0b01 |
では、どの整数型を使えばよいのでしょうか?
自分の整数が取りうる最大値を見積もって、適切なサイズを選びましょう。
usizeを使う主な場面は、何らかのコレクションのインデックスを扱うときです。
Cairoは、すべての整数型で期待される基本的な算術演算、つまり足し算、引き算、掛け算、割り算、余りをサポートしています。
整数の割り算は、0に向かって最も近い整数に切り捨てられます。
次のコードは、それぞれの数値演算をlet文でどのように使うかを示しています。
fn main() {
// addition
let sum = 5_u128 + 10_u128;
// subtraction
let difference = 95_u128 - 4_u128;
// multiplication
let product = 4_u128 * 30_u128;
// division
let quotient = 56_u128 / 32_u128; // result is 1
let quotient = 64_u128 / 32_u128; // result is 2
// remainder
let remainder = 43_u128 % 5_u128; // result is 3
}
これらの文の各式は数学演算子を使い、単一の値に評価され、その値が変数に束縛されます。
Cairoが提供するすべての演算子の一覧は、The Cairo Bookにあります。