Rust 逻辑运算符
位运算符
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
& | 按位与 | 5 & 3 | 1 |
| | 按位或 | 5 | 3 | 7 |
^ | 按位异或 | 5 ^ 3 | 6 |
! | 按位取反 | !5 | -6 |
<< | 左移 | 5 << 1 | 10 |
>> | 右移 | 5 >> 1 | 2 |
实例
fn main() {
let x: u8 = 0b1010; // 10
let y: u8 = 0b1100; // 12
println!("x & y = {:b}", x & y);
println!("x | y = {:b}", x | y);
x & y = 1000 x | y = 1110 x ^ y = 110 !x = 11110101 x << 1 = 10100 x >> 1 = 101
5、赋值与复合赋值运算符
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
= | 赋值 | let mut x = 5; x = 3; | x = 3 |
+= | 加并赋值 | x += 2 | x = x + 2 |
-= | 减并赋值 | x -= 2 | x = x - 2 |
*= | 乘并赋值 | x *= 2 | x = x * 2 |
/= | 除并赋值 | x /= 2 | x = x / 2 |
%= | 取余并赋值 | x %= 2 | x = x % 2 |
&= |= ^= <<= >>= | 位运算复合赋值 | x &= 2 | 类似 |
实例
fn main() {
let mut n = 5;
n += 3;
println!("n += 3 -> {}", n);
n *= 2;
println!("n *= 2 -> {}", n);
n >>= 1;
println!("n >>= 1 -> {}", n);
}
输出:
n += 3 -> 8 n *= 2 -> 16 n >>= 1 -> 8
6、 其他常见运算符
| 运算符 | 说明 | 示例 |
|---|---|---|
.. | 范围(不含右端) | 0..5 产生 0 到 4 |
..= | 范围(含右端) | 0..=5 产生 0 到 5 |
as | 类型转换 | 5 as f32 |
? | 错误传播(在 Result 中) | some()?; |
* | 解引用 | *ptr |
& | 取引用 | &x |
ref | 绑定为引用 | let ref y = x; |
实例
fn main() {
let x = 5;
let y = x as f64;
for i in 1..4 {
print!("{} ", i);
}
println!();
for i in 1..=3 {
print!("{} ", i);
}
println!();
let a = 10;
let b = &a;
println!("*b = {}", *b);
}
输出:
1 2 3 1 2 3 *b = 10
复合类型
元组是用一对 ( ) 包括的一组数据,可以包含不同种类的数据:
实例
let tup: (i32, f64, u8) = (500, 6.4, 1);
// tup.0 等于 500
// tup.1 等于 6.4
// tup.2 等于 1
let (x, y, z) = tup;
// y 等于 6.4
数组用一对 [ ] 包括的同类型数据。
实例
let a = [1, 2, 3, 4, 5];
// a 是一个长度为 5 的整型数组
let b = ["January", "February", "March"];
// b 是一个长度为 3 的字符串数组
let c: [i32; 5] = [1, 2, 3, 4, 5];
// c 是一个长度为 5 的 i32 数组
let d = [3; 5];
// 等同于 let d = [3, 3, 3, 3, 3];
let first = a[0];
let second = a[1];
// 数组访问
a[0] = 123; // 错误:数组 a 不可变
let mut a = [1, 2, 3];
a[0] = 4; // 正确
更多推荐


所有评论(0)