Rust 運算子
Rust 提供了一系列運算子(operators),每種運算子都有特定的功能和應用場景。
1. 算術運算子
這些運算子用於基本的數學運算:
+
: 加法,用於兩個數相加。- 示例:
let sum = 5 + 10;
- 示例:
-
: 減法,用於兩個數相減。- 示例:
let difference = 10 - 5;
- 示例:
*
: 乘法,用於兩個數相乘。- 示例:
let product = 4 * 3;
- 示例:
/
: 除法,用於兩個數相除。- 示例:
let quotient = 10 / 2;
- 示例:
%
: 取餘,用於計算兩個數的餘數。- 示例:
let remainder = 10 % 3;
- 示例:
2. 比較運算子
這些運算子用於比較兩個值,返回一個布林值:
==
: 相等,用於判斷兩個值是否相等。- 示例:
let is_equal = 5 == 5;
- 示例:
!=
: 不相等,用於判斷兩個值是否不相等。- 示例:
let is_not_equal = 5 != 6;
- 示例:
>
: 大於,用於判斷左邊的值是否大於右邊的值。- 示例:
let is_greater = 10 > 5;
- 示例:
<
: 小於,用於判斷左邊的值是否小於右邊的值。- 示例:
let is_less = 5 < 10;
- 示例:
>=
: 大於或等於,用於判斷左邊的值是否大於或等於右邊的值。- 示例:
let is_greater_or_equal = 10 >= 10;
- 示例:
<=
: 小於或等於,用於判斷左邊的值是否小於或等於右邊的值。- 示例:
let is_less_or_equal = 5 <= 10;
- 示例:
3. 邏輯運算子
這些運算子用於邏輯運算,通常與布林值結合使用:
&&
: 邏輯與,用於判斷兩個布林表示式是否都為true
。- 示例:
let and_result = true && false;
- 示例:
||
: 邏輯或,用於判斷兩個布林表示式是否至少一個為true
。- 示例:
let or_result = true || false;
- 示例:
!
: 邏輯非,用於取反一個布林表示式。- 示例:
let not_result = !true;
- 示例:
4. 賦值運算子
這些運算子用於將值賦給變數:
=
: 賦值,將右邊的值賦給左邊的變數。- 示例:
let x = 5;
- 示例:
+=
: 加賦值,將右邊的值加到左邊的變數上。- 示例:
let mut x = 5; x += 10;
- 示例:
-=
: 減賦值,將右邊的值從左邊的變數中減去。- 示例:
let mut x = 10; x -= 5;
- 示例:
*=
: 乘賦值,將右邊的值乘以左邊的變數。- 示例:
let mut x = 2; x *= 3;
- 示例:
/=
: 除賦值,將左邊的變數除以右邊的值。- 示例:
let mut x = 10; x /= 2;
- 示例:
%=
: 模賦值,將左邊的變數取模右邊的值。- 示例:
let mut x = 10; x %= 3;
- 示例:
5. 位運算子
這些運算子用於對位進行操作,通常用於底層程式設計或特定演算法實現:
&
: 按位與,對兩個整數的對應位都為 1 時結果為 1。- 示例:
let and = 5 & 3; // 結果為 1
- 示例:
|
: 按位或,對兩個整數的對應位有一個為 1 時結果為 1。- 示例:
let or = 5 | 3; // 結果為 7
- 示例:
^
: 按位異或,對兩個整數的對應位不同則結果為 1。- 示例:
let xor = 5 ^ 3; // 結果為 6
- 示例:
!
: 按位非,對整數的每一位取反。- 示例:
let not = !0b0001_0010; // 結果為 0b1110_1101
- 示例:
<<
: 左移,將位向左移動指定的位數(右邊補零)。- 示例:
let left_shift = 1 << 3; // 結果為 8
- 示例:
>>
: 右移,將位向右移動指定的位數(左邊補符號位或補零)。- 示例:
let right_shift = 8 >> 3; // 結果為 1
- 示例:
6. 範圍運算子
範圍運算子用於生成數值範圍:
..
: 半開區間,從起始值到結束值(不包括結束值)。- 示例:
for i in 0..5 { println!("{}", i); } // 輸出 0 到 4
- 示例:
..=
: 閉區間,從起始值到結束值(包括結束值)。- 示例:
for i in 0..=5 { println!("{}", i); } // 輸出 0 到 5
- 示例:
..
(單側範圍): 生成從起始值到某個值或從某個值到結束值的範圍。- 示例:
let r = 3..; // 從 3 到無窮大
let r = ..3; // 從負無窮大到 3
- 示例:
7. 引用與解引用運算子
這些運算子用於處理指標和引用:
&
: 引用運算子,建立一個引用(即指向某個值的指標)。- 示例:
let x = 5; let y = &x;
- 示例:
*
: 解引用運算子,解引用一個指標或引用,獲取其指向的值。- 示例:
let x = 5; let y = &x; let z = *y;
- 示例:
8. 其他運算子
.
: 成員訪問或方法呼叫。- 示例:
let len = vec.len();
- 示例:
..
: 結構體更新語法或元組解構。- 示例:
let updated = Person { age: 30, ..person };
- 示例:
[]
: 索引運算子,用於訪問陣列、切片、向量等的元素。- 示例:
let first = arr[0];
- 示例:
()
: 呼叫函式或方法,或用於將表示式分組。- 示例:
let result = add(5, 3);
- 示例:
?
: 錯誤傳播運算子,用於傳播Result
或Option
型別的錯誤。- 示例:
let value = some_function()?;
- 示例:
::
: 訪問路徑運算子- 在模組系統中,用於訪問模組中的專案(如函式、常量、型別)。
- 用於呼叫結構體、列舉的關聯函式或靜態方法。
- 從一個模組或包中訪問另一個模組或包的專案。
- 示例:
mod math {
pub const PI: f64 = 3.14159;
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
}
fn main() {
let pi = math::PI;
let sum = math::add(5, 10);
let origin = Point::origin();
let color = Color::Red;
}
struct Point {
x: i32,
y: i32,
}
impl Point {
pub fn origin() -> Self {
Point { x: 0, y: 0 }
}
}
enum Color {
Red,
Green,
Blue,
}
as
: 轉換運算子:用於型別轉換,將一個值轉換為另一種型別。- 示例:
let x = 5;
let y = x as f64; // 將 i32 轉換為 f64
_
: 佔位符:- 在模式匹配中表示萬用字元,忽略某個值;或者在型別推斷中使用表示不關心的型別。
- 示例:
let tuple = (1, 2, 3);
let (_, y, _) = tuple;
let v: Vec<_> = (0..10).collect();
|
: 模式匹配中的或運算子:- 在模式匹配中表示多種模式的組合,即如果任何一種模式匹配,則匹配成功。
- 示例:
let x = 1;
match x {
1 | 2 => println!("One or two"), // 如果 x 是 1 或 2,都會匹配
_ => println!("Other"),
}
總結
Rust 提供了豐富的運算子,以便開發者在不同的程式設計場景下使用。每個運算子都有其特定的功能和適用場景,理解它們的用法有助於編寫更加高效和清晰的 Rust 程式碼。
引用
- 運算子與符號