2-1
原生类型
bash
有符号整数(signed integers):i8、i16、i32、i64、i128 和 isize(指针宽度)
无符号整数(unsigned integers): u8、u16、u32、u64、u128 和 usize(指针宽度)
浮点数(floating point): f32、f64
char(字符):单个 Unicode 字符,如 'a','α' 和 '∞'(每个都是 4 字节)
bool(布尔型):只能是 true 或 false
单元类型(unit type):()。其唯一可能的值就是 () 这个空元组
bash
数组(array):如 [1, 2, 3]
元组(tuple):如 (1, true)
rust
fn main() {
// 变量可以给出类型说明。
let logical: bool = true;
let a_float: f64 = 1.0; // 常规说明
let an_integer = 5i32; // 后缀说明
// 否则会按默认方式决定类型。
let default_float = 3.0; // `f64`
let default_integer = 7; // `i32`
// 类型也可根据上下文自动推断。
let mut inferred_type = 12; // 根据下一行的赋值推断为 i64 类型
inferred_type = 4294967296i64;
// 可变的(mutable)变量,其值可以改变。
let mut mutable = 12; // Mutable `i32`
mutable = 21;
// 报错!变量的类型并不能改变。
mutable = true;
// 但可以用遮蔽(shadow)来覆盖前面的变量。
let mutable = true;
}
bash
要点1 : 常规说明 后缀说明 类型推断 默认不可变 mut可变 shadow机制
字面量和运算符
rust
fn main() {
// 整数相加
println!("1 + 2 = {}", 1u32 + 2);
// 整数相减
println!("1 - 2 = {}", 1i32 - 2);
// 试一试 ^ 尝试将 `1i32` 改为 `1u32`,体会为什么类型声明这么重要
// 短路求值的布尔逻辑
println!("true AND false is {}", true && false);
println!("true OR false is {}", true || false);
println!("NOT true is {}", !true);
// 位运算
println!("0011 AND 0101 is {:04b}", 0b0011u32 & 0b0101);
println!("0011 OR 0101 is {:04b}", 0b0011u32 | 0b0101);
println!("0011 XOR 0101 is {:04b}", 0b0011u32 ^ 0b0101);
println!("1 << 5 is {}", 1u32 << 5);
println!("0x80 >> 2 is 0x{:x}", 0x80u32 >> 2);
// 使用下划线改善数字的可读性!
println!("One million is written as {}", 1_000_000u32);
}
bash
要点1 : rust 只有短路逻辑
要点2 : 位运算 与 或 异或 左移 右移
要点3 : println!("0011 OR 0101 is {:04b}", 0b0011u32 | 0b0101); | 要求两个类型 一致 后面会被自动推断成u32
要点4 : 上面那个改类型 不是不能相减 而是 溢出范围了 如果是 3u32 - 2 就不会有事
注意 : 这不是隐式转换, rust是强类型语言 没有隐式转换