前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rust学习笔记:3.2 标量类型

Rust学习笔记:3.2 标量类型

作者头像
DioxideCN
发布2022-08-05 19:28:56
5070
发布2022-08-05 19:28:56
举报
文章被收录于专栏:用户4480853的专栏

3.2 数据类型

  • 数据类型包括了:标量和复合类型
  • Rust 是静态编译语言,在编译时必须知道所有变量的类型;
    • 给予使用的值,编译器通常能够推断出它的具体类型;
    • 但如果可能的类型比较多(例如把 String 转为整数的 parse 方法),就必须添加类型的标注,否则编译会报错(例子)
代码语言:javascript
复制
fn main() {
    let guess:u32 = "42".parse().expect("NaN");
    println!("guess is {}", guess); //42
}

3.2.1 标量类型

  • 一个标量类型代表一个单个的值
  • Rust 有四个主要的标量类型:
    1. 整数类型
    2. 浮点类型
    3. 布尔类型
    4. 字符类型

3.2.1.1 整数类型

  • 整数类型没有小数部分;
  • 例如 u32 就是一个无符号的整数类型,占据 32 位的空间;
  • 无符号整数类型以 u 开头;
  • 有符号整数类型以 i 开头;
  • Rust 的整数类型列表如图: |Length|Signed|Undinged| |—|—|—| |8-bit|i8|u8| |16-bit|i16|u16| |32-bit|i32|u32| |64-bit|i64|u64| |128-bit|i128|u128| |arch|isize|usize|
  • 每种都分为 i 和 u,以及固定的位数;
  • -(2^n-1)2^{n-1}-1
  • 无符号范围: 000 到2^n-1
isize 和 usize 类型
  • isize 和 usize 类型的位数由程序运行的计算机的架构所决定:
    • 如果是 64 位计算机,那就是 64 位的;
    • 如果是 32 位计算机,那就是 32 位的;
  • 使用 isize 和 usize 的主要场景是对某种集合进行索引操作;
整数字面值

中文

Number literals

Example

普通常数

Decimal

98_222

16进制

Hex

0xff

8进制

Octal

0o77

2进制

Binary

0b1111_0000

字节类型

Byte(u8 only)

b’A’

  • 除了 byte 类型外,所有的数字字面值都允许使用类型后缀;
    • 例如:57u8;
  • 如果不清楚该使用哪种类型,可以用 Rust 相应的默认类型;
  • 整数的默认类型就是 i32:
    • 总体上来说速度很快,即使在 64 位系统中;
整数溢出
  • 例如:u8 的范围是 0 - 255,如果把一个 u8 变量的值设为 256,那么:
    • 调试模式下编译:Rust 会检查整数溢出,如果发生溢出,程序在运行时就会 panic ;
    • 发布模式下(-- release)编译:Rust 不会检查可能导致 panic 的整数溢出;
      • 如果溢出发生:Rust 会执行 “环绕” 操作:
        • 256 变成 0,257 变成 1 …
      • 但程序不会 panic

3.2.1.2 浮点类型

  • Rust 有两种基础的浮点类型,也就是含有小数部分的类型
    • f32,32位,单进度
    • f64,64位,双精度
  • Rust 的浮点类型使用了 IEEE-754 标准来描述
  • f64 是默认类型,因为在现代 CPU 上 f64 和 f32 的速度差不多,而且进度更高
代码语言:javascript
复制
fn main() {
    let x = 2.0; //f64
    let y:f32 = 1.5; //f32
}
数值操作
  • 加减乘除余
代码语言:javascript
复制
fn main() {
    let sum = 5 + 10;           //i32
    let difference = 1.5 - 1.1; //f64
    let produce = 5 * 7;        //i32
    let quotient = 56.7 / 32.2; //f64
    let reminder = 5 % 3;       //i32
}

3.2.1.3 布尔类型

  • Rust 的布尔类型也有两个值:truefalse
  • 占用一个字节大小
  • 符号是 bool
代码语言:javascript
复制
fn main() {
	let t = true;       //bool
	let f:bool = false; //bool
}

3.2.1.4 字符类型

  • Rust 语言中 char 类型被用来描述语言中最基础的单个字符。
  • 字符类型的字面量使用单引号。
  • 占用 4 个字节大小。
  • 是 Unicode 标量值,可以表示比 ASCII 多得多的字符内容:拼音、中日韩文、零长度空白字符、emoji表情等。
    • U+0000U+D7FF
    • U+E000U+10FFFF
  • 但是 Unicode 中并没有 “字符” 概念,所以直接上认识的字符也许余 Rust 中的概念并不相符。
代码语言:javascript
复制
fn main() {
    let x = 'Z';
    let y:char = '★';  //char
    let z = '🌚';       //char
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.2 数据类型
    • 3.2.1 标量类型
      • 3.2.1.1 整数类型
      • 3.2.1.2 浮点类型
      • 3.2.1.3 布尔类型
      • 3.2.1.4 字符类型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档