integer是一種不含小數部分的數字。在 Cairo 中,整數的型別宣告會指出程式設計師可以用多少位元來儲存這個值。
無號整數只能表示正數和數字 0(零),這在某些程式設計情境下很有用,例如陣列索引和記憶體管理。
Cairo 也支援有號整數,型別名稱以 i 為開頭。這些整數可以同時表示正數和負數,大小範圍從i8到i128。每個有號型別可以儲存的數字範圍是 $-2^{n-1}$ 到 $2^{n-1} - 1$(含),其中 $n$ 是該型別使用的位元數。例如,i8可以儲存 $-2^7$ 到 $2^7 - 1$ 的數字,也就是 $-128$ 到 $127$。
| Length | Unsigned | Signed |
|---|---|---|
| 8-bit | u8 | i8 |
| 16-bit | u16 | i16 |
| 32-bit | u32 | i32 |
| 64-bit | u64 | i64 |
| 128-bit | u128 | i128 |
| 256-bit | u256 | ------ |
還有一種特殊的整數型別叫做usize,目前它只是u32的別名。未來當 Cairo 可以編譯成 MLIR(Multi-Level Intermediate Representation)時,這個型別可能會扮演更獨特的角色。
你可以用下表所示的任何一種形式來撰寫整數常值。請注意,若某個數字常值可以屬於多種數值型別,可以在後面加上型別後綴,例如57_u8,用來指定型別。數字常值也可以使用視覺分隔符號_,讓程式碼更容易閱讀。
| Numeric Literals | Example |
|---|---|
| Decimal | 98222 |
| Hex | 0xff |
| Octal | 0o04321 |
| Binary | 0b01 |
那麼,你該怎麼知道要用哪一種整數型別呢?試著估算你的整數可能達到的最大值,再選擇適合的大小。你會用到usize的主要情境,是對某種集合進行索引的時候。
Cairo 支援所有整數型別都適用的基本數學運算:加法、減法、乘法、除法和取餘數。整數除法會朝零的方向截斷,取最接近的整數。以下程式碼示範如何在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 找到。