走进Rust:数据类型

Rust大约 2589 字

Scalar Types

标量类型。Rust4个主要的标量类型:integers(整数类型)、floating-point numbers(浮点数类型)、Booleans(布尔类型)、characters(字符类型)。

Integer

Signed数值范围:-(2n - 1) 到 2n - 1 - 1,nbit的值。如i8可以存储的值范围是:-(27) 到 27 - 1 等于 -128 到 127。

Unsigned数值范围:0 到 2n - 1。如u8可以存储的值范围是:0 到 28 - 1 等于 0 到 255。

isizeusize类型取决于程序运行的操作系统:32位系统是32bits64位系统是64bits

LengthSignedUnsigned
8-biti8u8
16-biti16u16
32-biti32u32
64-biti64u64
128-biti128u128
archisizeusize

除了字节类型,数值后可以加类型后缀,比如:57u8,表示u8类型的数值57_下划线可以帮助快速识别数字,比如:1_000,代表1000_只是方便观察。

Number literalsExample
Decimal98_222
Hex0xff
Octal0o77
Binary0b1111_0000
Byte (u8 only)b'A'

如果不确定哪种类型的integerRust推荐使用i32,即使是在64位操作系统上,这个类型更快。

isizeusize类型的使用场景是:对一些集合进行索引时。

Floating-Point

Rust有两种原子类型的浮点数,f32f64,分别占用32比特和64比特的空间大小。默认的浮点数类型是f64,因为在现代的CPUf64在速度上与f32相差无几,但f64精度更高。

示例:加减乘除模。

fn main() {
    // 加
    // 15
    let sum = 5 + 10;
    println!("sum={}", sum);

    // 减
    // 91.2
    let difference = 95.5 - 4.3;
    println!("difference={}", difference);

    // 乘
    // 120
    let product = 4 * 30;
    println!("product={}", product);

    // 除
    // 1.7608695652173911
    let quotient = 56.7 / 32.2;
    println!("quotient={}", quotient);

    // 模
    // 3
    let remainder = 43 % 5;
    println!("remainder={}", remainder);
}

Boolean

bool布尔类型主要作用是做流程控制,如if表达式。占用1个字节的空间大小。1字节=8比特。

fn main() {
    let t = true;

    let f: bool = false; // 明确指定类型
}

Character

char字符类型是Rust中最原始字母类型,使用单引号指定。表示重音字母、中日韩的字符、emoji表情和零宽度空格。占用4个字节空间大小。

fn main() {
    let c = 'z';
    let z = 'ℤ';
    let heart_eyed_cat = '😻';

    println!("c={}", c);
    println!("z={}", z);
    println!("heart_eyed_cat={}", heart_eyed_cat);
}

Compound Types

复合类型是组合了多个值后的一种类型,Rust有两种原始的符合类型:元组和数组。

Tuple

元组类型。可存储不同类型值的集合。固定长度,一旦声明,大小将不能扩容和缩减。使用(x, y, z)可接收元组类型,或使用元组变量.角标索引获得元组对应索引的值。

fn main() {
    let tup = (500, 6.4, 1);
    let (x, y, z) = tup;
    // x=500, y= 6.4, z=1
    println!("x={}, y= {}, z={}", x, y, z);

    let x: (i32, f64, u8) = (500, 6.4, 1);
    let index1 = x.0;
    let index2 = x.1;
    let index3 = x.2;
    // index1=500, index2= 6.4, index3=1
    println!("index1={}, index2= {}, index3={}", index1, index2, index3);
}

Array

数组类型。只能存储相同类型值得集合。固定长度。使用数组[index]获取对应角标的值。let b = [3;5]表示:数组b初始化为53;号方式简洁化的初始方式。

fn main() {
    let months = ["January", "February", "March", "April", "May", "June", "July",
        "August", "September", "October", "November", "December"];

    let a: [i32; 5] = [1, 2, 3, 4, 5];
    let first = a[0];
    let second = a[1];

    // 等价于 let a = [3, 3, 3, 3, 3];
    let b = [3; 5];
}
阅读 152 · 发布于 2020-06-30

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批