跟我一起学rust-数据类型

后端 / 笔记 / 2021-11-09

rust是静态语言,在编译时需要知道所有变量的类型.

  • 基于使用的值,编译器通常能推断出他的类型
  • 如果可能的类型比较多,就必须添加类型的标注,否则编译会报错

rust中类型分为两种 标量类型复合类型

标量类型

整数型

8 16 32 64 128

有符号整数型

rust中有符号类型以i开头

  • i8 有符号8位
  • i16 有符号16位
  • i32有符号32位
  • i64 有符号64位
  • I128 有符号128位
let var8:i8 =10;
let var16:i16=128;
let var32:i32 = 1234;
let var64:i64 =11223344;
let var128:i128 = 112233445566;

无符号整数型

rust中无符号类型以u开头

  • u8 无符号8位
  • u16 无符号16位
  • u32 无符号32位
  • u64无符号64位
  • u128无符号128位

isize和usize

rust整数类型中有两个特殊的类型,他们的值取决于当前计算机运行位数

  • isize: 64位计算机 为 64位 有符号
  • usize 32位计算机 为 32位 无符号

浮点型

单精度浮点型

rust中单精度浮点型用 f32表示

双精度浮点型

rust中双精度浮点型用 f64表示

布尔类型

占一个字节大小,非真既假,非假既真

  • true
  • false

字符类型

rust中char类型比较特殊,占用4个字节大小,可使用 unicode字符.

let guess:u32 = "42".parse().expect("Not a numer");
println!("{}",guess);
let var8:i8 =10;
let var16:i16=128;
let var32:i32 = 1234;
let var64:i64 =11223344;
let var128:i128 = 112233445566;
println!("{},{},{},{},{}",var8,var16,var32,var64,var128);

let default_int:isize =64;
let default_uint:usize = 64;
println!("{},{}",default_int,default_uint);

// 数值操作 + - * / % 
let sum =5+10;
let sub = 10-5;
let mul = 3*2;
let div = 12/3;
let rem  = 54%5;

println!("sum={},sub={},mul={},div={},rem={}",sum,sub,mul,div,rem);


let is_light:bool = true;
let is_shutdown = false;

println!("isLight:{},isShutdown:{}",is_light,is_shutdown);

// 字符

let x = 'A';
let y:char = 'の';
let z  = '';
println!("x={},y={},z={}",x,y,z);

复合类型

rust中复合类型只有两种,元组,数组

元组

  • 长度固定一旦创建长度无法修改
  • 在小括号里,将值用逗号分开
  • tuple 中每一个位置都对应一个类型,tuple中类型不必相同
  • tuple 解构 let (x,y,z) =xx;
  • 访问元素 xxx.0 xxx.1

语法

let varName:(type1,type2,type3)=(val1,val2,val3);

访问元组的方式:下表索引访问 varName.index

let tup:(i32,f64,u8)= (500,6.4,1);
println!("{},{},{}",tup.0,tup.1,tup.2);

可用通过元组解构来赋值给多个变量

let (x,y,z) = tup;
println!("{},{},{}",x,y,z);
// 元组
let tup:(i32,f64,u8)= (500,6.4,1);
println!("{},{},{}",tup.0,tup.1,tup.2);
// tuple 解构
let (x,y,z) = tup;
println!("{},{},{}",x,y,z);

数组

  • 数组中类型必须一致
  • 数组长度固定
  • 中括号里,用逗号分开
  • 分配在stack上
  • 没有vector 好用
  • 表示一个数组 let xxx[type,size]={1,2,3,4,5};

语法

let arr:[arrType,arrSize]=[1,2,3,4,5];
// 因为数组内元素类型一致,所以可以省略类型
let arr =[1,2,3];

创建一个数组

// 数组
let arr =[1,2,3,4,5,6];
for i in arr {
    println!("{}",i);
}
let arr:[i32;3]=[1,23,4];

创建单一元素数组

创建9个元素都是1的数组

// 创建单一元素数组
let matrix =[1;9];
// let martix:[i32,9]=[1,1,1,1,1,1,1,1,];
println!("---------");
for ele in matrix {
    println!("{}",ele);
}