Rust 01: i32/u32等数值类型 + 空值() + 元组tuple + 类型别名 + assert断言

println!支持的格式化方式

第二天,先补充和总结一下println!支持的格式化方式:

fn main() {
    println!("{}", 1); // 基本方式,打印实现了Display trait的类型
    println!("{:?}", "test"); // 打印实现了Debug trait的类型
    println!("{:#?}", ("1. t1", "2. t2")); // 带换行和缩进的Debug打印
    println!("0b{:b}", 0b11_01); // 二进制
    println!("0o{:o}", 10); // 八进制
    println!("0x{:x}", 0xFF); // 十六进制(小写)
    println!("0x{:X}", 0xFF); // 十六进制(大写)
    println!("{:p}", &100); // 打印引用或者指针所指对象的内存地址
    println!("{:e}", 1000f32); // 1e3,科学计数(小写)
    println!("{:E}", 1000f64); // 1E3,科学计数(大写)
    // 使用参数索引
    println!("{0} {1} {1}", "p", "q"); //p q q
    // 使用命名参数
    println!("{a} {b} {b}", a = "p", b = "q"); //p q q
}

接下来,有必要先认识一下Rust支持的基本数据类型。
其中整数(integer)相关的类型有:带符号(signed)的i8、i16、i32、i64、i128、isize;相对应的无符号(unsigned)类型为u8、u16、u32、u64、u128、usize
其中isize和usize所占字节长度取决于CPU的位数(16/32/64)。数组和列表的下标就是usize类型
还有32位浮点数f32和64位浮点数f64
此外,还有占用1个字节的bool类型和占4个字节的char类型。

数值类型、std::mem::size_of()

fn main() {
    let b: bool = true;
    let i1:i8 = 1;
    let i1:i16 = 1;//rust允许变量名被重新定义为新的类型
    let i1:i32 = 1;
    let i1:i64 = 1;
    let i1:i128 = 1;
    
    // u8类型本质就是1个字节
    let i2:u8 = 0xFF;
    let i2:u8 = b'A';//可以用b后跟字符进行初始化
    let i2:u16 = 0xFF;//16进制
    let i2:u32 = 0o77;//8进制
    let i2:u64 = 0b1111_1111;//2进制
    let i2:u128 = 100_000;//默认是10进制

    //isize/usize占用的字节取决于处理器位数
    //16位机器上,占2个字节(可能某些16位单片机要用rust吧)
    //32位机器上,占4个字节
    //64位机器上,占8个字节
    let i1:isize = 1;
    let i2:usize = 100;
    // `i2 as i32`是把usize类型的i2转成i32类型
    let end: i32 = i2 as i32 - 1;

    // bool类型占用1个字节
    println!("{}", std::mem::size_of::<bool>());//1
    // i8类型占用1个字节
    println!("{}", std::mem::size_of_val(&100i8));//1
    //rust中char类型占用4个字节
    let c:char = 'x';
    println!("{}", std::mem::size_of_val(&c));//4
}

判断字符是数字还是字母

is_alphabetic(),判断字符是否是A-Za-z
is_ascii_digit(),判断字符是否是0-9

let c = 'x';
if c.is_alphabetic() {
    println!("{} 是A-Za-z的字母", c);
} else if c.is_ascii_digit() {
    println!("{} 是0-9的数字", c);
}

空类型(unit):()

()类型代表“空”(类比其他语言中的null/nil),占用0个字节。

let empty = ();
// 等号右边是一个语句(Statment)块,语句块的
// 最后一个表达式(Expression)的值就是该语句块的值
let i_1 = {1i32};//i32类型的1
let empty = {};//语句块的值为()
let empty = {;};//语句块的值为()
println!("empty is: {:?}", empty);//empty is: ()
println!("{}", std::mem::size_of_val(&empty));//0

元组tuple + 类型别名

//元组,tuple
let pp: (String, char, i32) = ("张三".to_string(), 'M', 20);
println!("{:?}", pp);
// 通过type关键字,给元组定义一个别名Person
// 当然,逻辑上更好的做法是定义为一个struct
type Person = (String, char, i32);
let p: Person = pp;
println!("name {}, gender: {}, age: {}", p.0, p.1, p.2);

assert!断言

此外,还需要说明的是,rust中的数值类型也有自己的方法可以调用。

//求得整数二进制形式中1的个数
assert_eq!(5i32.count_ones(), 2);
//浮点类型才可以sqrt()
assert_eq!(100f32.sqrt(),10f32);

assert_eq!(100.max(200), 200);
assert_eq!(100.cmp(&1000), std::cmp::Ordering::Less);
assert_eq!((-10i32).abs(), 10);
assert_eq!((-10i32).add(10), 0);
assert!(100.ge(&80));//true, ge是great equal的简写
assert!(100 >= 80);//true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值