官术网_书友最值得收藏!

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的整數類型

021-01

下面介紹整數類型聲明的語法,第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由單引號來定義,其聲明語法如下所示。

022-01

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
主站蜘蛛池模板: 阿合奇县| 禹州市| 芮城县| 卢龙县| 如东县| 汕头市| 略阳县| 兴文县| 施秉县| 凌源市| 通河县| 上思县| 北票市| 时尚| 黄冈市| 池州市| 庄浪县| 佛冈县| 佛山市| 凤凰县| 平江县| 纳雍县| 开原市| 甘德县| 敦煌市| 马山县| 娄烦县| 龙泉市| 读书| 高雄县| 虹口区| 洛隆县| 修文县| 靖安县| 徐闻县| 阿坝县| 洛浦县| 从江县| 天峻县| 龙胜| 蓝田县|