- Rust編程:入門、實戰與進階
- 朱春雷
- 1556字
- 2021-04-30 12:37:22
2.2 基本數據類型
數據類型是Rust作為強類型的靜態編譯語言的基礎。有了數據類型,Rust才能對不同的類型抽象出不同的運算,開發者才能在更高的層次上操作數據,而不用關心具體的存儲和運算細節。Rust的基本數據類型有整數類型、浮點數類型、布爾類型、字符類型、范圍類型等。
2.2.1 整數類型
整數是指沒有小數部分的數字,比如0、1、-2、99999等,而0.0、1.0、-2.1、9.99999都不是整數。根據有無符號,整數可以分為有符號整型和無符號整型。有符號和無符號整型代表能否存儲負的整數值。有符號整型可以存儲正數,也可以存儲負數,而無符號整型只能存儲正數。按照存儲大小,整數類型可以進一步分為1字節、2字節、4字節、8字節、16字節(1字節=8位)。表2-1列出了整數類型所有的細分類型,Rust默認的整數類型是i32。isize和usize主要作為數組或集合的索引類型使用,其長度依賴于運行程序的計算機系統。在64位計算機系統上,其長度是64位;在32位計算機系統上,其長度是32位。
表2-1 Rust的整數類型

下面介紹整數類型聲明的語法,第1行代碼是標準的整數類型變量聲明;第2行代碼創建的數字字面量后使用類型后綴,表示這是一個u32類型;第3行代碼沒有指定類型,也沒有加類型后綴,Rust默認整數類型為i32;第4~6行代碼分別使用前綴0b、0o和0x表示二進制、八進制和十六進制的數字。
1 let integer1: u32 = 17; // 類型聲明 2 let integer2 = 17u32; // 類型后綴聲明 3 let integer3 = 17; // 默認i32類型 4 let integer4: u32 = 0b10001; // 二進制 5 let integer5: u32 = 0o21; // 八進制 6 let integer6: u32 = 0x11; // 十六進制 7 let integer7 = 50_000; // 數字可讀性分隔符_
為了方便閱讀數值較大的數字,Rust允許使用下劃線“_”作為虛擬分隔符來對數字進行可讀性分隔。比如,為了提高50000的可讀性,可以寫成50_000。Rust在編譯時會自動移除數字可讀性分隔符“_”。
有符號整數類型的數值范圍是-2n-1~2n-1-1,無符號整數類型的數值范圍是0~2n-1,這里n是長度。比如,i8的數值范圍是-27~27-1,也就是-128~127。u8的數值范圍是0~28-1,也就是0~255。
如果某個變量的值超出了給定的數值范圍,將會發生整型溢出。編譯器將其視為一種錯誤。比如,如果一個u8類型的變量被賦值256,就會發生整型溢出而導致程序錯誤。
2.2.2 浮點數類型
浮點數是指帶小數點的數字,比如0.0、1.0、-2.1、9.99999等。按照存儲大小,浮點數分為f32和f64兩類。Rust默認的浮點數類型是f64。
- f32:單精度浮點數,小數點后至少有6位有效數字。
- f64:雙精度浮點數,小數點后至少有15位有效數字。
浮點數類型聲明的語法如下,第1行代碼是標準的浮點數類型變量聲明。第2行代碼創建的浮點數字面量后使用類型后綴,表示這是一個f32類型。第3行代碼沒有指定類型,也沒有加類型后綴。第4行代碼浮點數支持使用數字可讀性分隔符“_”。
1 let float1: f32 = 1.1; // 類型聲明 2 let float2 = 2.2f32; // 類型后綴聲明 3 let float3 = 3.3; // 默認f64類型 4 let float4 = 11_000.555_001; // 數字可讀性分隔符_
2.2.3 布爾類型
Rust使用bool來聲明布爾類型的變量,聲明的語法如下所示。布爾類型只有兩個可能的取值,即true或false,一般用于邏輯表達式中。
1 let t: bool = true; // 顯式類型聲明 2 let f = false; // 隱式類型聲明
2.2.4 字符類型
Rust使用UTF-8作為底層的編碼。字符類型代表的是一個Unicode標量值(Unicode Scalar Value),包括數字、字母、Unicode和其他特殊字符。每個字符占4個字節。字符類型char由單引號來定義,其聲明語法如下所示。

2.2.5 范圍類型
范圍類型常用來生成從一個整數開始到另一個整數結束的整數序列,有左閉右開和全閉兩種形式,比如(1..5)是左閉右開區間,表示生成1、2、3、4這4個數字;(1..=5)是全閉區間,表示生成1、2、3、4、5這5個數字。范圍類型自帶一些方法,如代碼清單2-4所示。第9行代碼中的rev方法可以將范圍內的數字順序反轉,第14行代碼中的sum方法可以對范圍內的數字進行求和。
代碼清單2-4 范圍類型
1 fn main() { 2 print!("(1..5): "); 3 for i in 1..5 { 4 print!("{} ", i); 5 } 6 println!(); 7 8 print!("(1..=5).rev: "); 9 for i in (1..=5).rev() { 10 print!("{} ", i); 11 } 12 println!(); 13 14 let sum: i32 = (1..=5).sum(); 15 println!("1 + 2 + 3 + 4 + 5 = {}", sum); 16 } 17 18 // (1..5): 1 2 3 4 19 // (1..=5).rev: 5 4 3 2 1 20 // 1 + 2 + 3 + 4 + 5 = 15
- DBA攻堅指南:左手Oracle,右手MySQL
- Java入門經典(第6版)
- C和C++安全編碼(原書第2版)
- Learning ASP.NET Core 2.0
- Animate CC二維動畫設計與制作(微課版)
- Microsoft System Center Orchestrator 2012 R2 Essentials
- Python機器學習基礎教程
- 運用后端技術處理業務邏輯(藍橋杯軟件大賽培訓教材-Java方向)
- Machine Learning in Java
- Vue.js 2 Web Development Projects
- Instant PHP Web Scraping
- 計算機應用基礎(第二版)
- 零基礎學編程系列(全5冊)
- Java EE 7 Development with WildFly
- 數據結構與算法詳解