首页 > 其他分享 >Rust 从入门到精通05-数据类型

Rust 从入门到精通05-数据类型

时间:2022-08-15 22:16:10浏览次数:48  
标签:struct 05 i32 数据类型 类型 let fn println Rust

Rust 是 静态类型statically typed)语言,也就是说在编译时就必须知道所有变量的类型。

在 Rust 中,每一个值都属于某一个 数据类型data type),分为两大类:

①、标量(scalar):整型、浮点型、布尔类型、字符类型

②、复合(compound):元祖(tuple)、数组(array)、结构体(struct)

1、标量scalar

每个类型有一个单独的值。

1.1 整型

表示没有小数部分的数字,分为有符号(以 i 开头)和无符号(以 u 开头)整型。

数字类型的默认类型是 i32。

长度 有符号 无符号
8-bit i8 u8
16-bit i16 u16
32-bit i32 u32
64-bit i64 u64
128-bit i128 u128
arch isize usize

每一个有符号的整型可以储存包含从 -(\(2^{n - 1}\)) 到 \(2^{n - 1}\) - 1 在内的数字,这里 n 是整型定义的长度。所以 i8 可以储存从 -\(2^7\)到 \(2^7\) - 1 在内的数字,也就是从 -128 到 127。无符号的变体可以储存从 0 到 \(2^{n - 1}\) 的数字,所以 u8 可以储存从 0 到 \(2^8 - 1\) 的数字,也就是从 0 到 255。

另外,isizeusize 类型依赖运行程序的计算机架构:64 位架构上它们是 64 位的, 32 位架构上它们是 32 位的。

1.1.1 所有数字字面量,可以在任意地方添加下划线_

fn int_test(){
    //所有数字字面量,可以在任意地方添加下划线_
    let x : u32 = 1_2_3;
    let y = x + 1;
    //打印结果为 124
    println!("{}",y);
}

1.1.2 字面量可以跟类型后缀,表示数字具体类型

//字面量可以跟类型后缀,表示数字具体类型
fn int_test2(){
    let x = 123i32;
    let y = x + 1;
    //打印结果为 124
    println!("{}",y);
}

1.1.3 直接对整型字面量调用函数

//直接对整型字面量调用函数
fn int_test3(){
    let x : i32 = 9;
    //打印结果为 729
    println!("9 power 3 = {}",x.pow(3));
}

1.1.4 整数溢出

Rust 对于整数溢出的处理方式如下:
①、默认情况下,在debug模式下编译器会自动插入整数溢出检查,一旦发生溢出,则会引发 panic;
②、在 release 模式下,不检查整数溢出,而是自动舍弃高位的方式。

1.1.5 如何选择

通常默认类型 i32 即可,它通常是最快的。

1.2 浮点

Rust 有两个原生的 浮点数floating-point numbers)类型,它们是带小数点的数字。是基于 IEEE 754-2008 标准的浮点类型,分别是 f32f64,分别占 32 位和 64 位。默认类型是 f64,因为在现代 CPU 中,它与 f32 速度几乎一样,不过精度更高。

fn float_test(){
    //123.0 f32类型
    let f1 = 123.0f32;
    //0.1 f64类型
    let f2 = 0.1f64;
}

1.3 布尔类型

布尔类型(bool)代表的是“是”和“否”的二值逻辑。它有两个值:

true和false

一般用在逻辑表达式中,可以执行“与”“或”“非”等运算。

fn bool_test(){
    let x = true;
    //取反运算
    let y = !x;

    //逻辑与,带短路功能
    let z = x && y;

    //逻辑或,带短路功能
    let z = x || y;

}

1.4、字符类型

字符类型由 char 表示。它可以描述任何一个符合 unicode 标准的字符值。在代码中,单个的字符字面量用单引号包围(不同于字符串用):

1.4.1 4个字节字符

let heart_eyed_cat = '

标签:struct,05,i32,数据类型,类型,let,fn,println,Rust
From: https://www.cnblogs.com/ysocean/p/16589811.html

相关文章

  • NC50500 凸多边形的划分
    题目链接题目题目描述给定一个具有N个顶点的凸多边形,将顶点从1至N标号,每个顶点的权值都是一个正整数。将这个凸多边形划分成N-2个互不相交的三角形,试求这些三角形顶点的......
  • mybatis_05_创建mapper.xml
    创建mapper.xml示例IndicatorMapper.xml:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""h......
  • Python-05输入输出
    Python输入语句:     在Python3.x中raw_input()和input()进行了整合,去除raw_input(),仅仅保留了Input()函数,其接收任意输入,将所有输入默认为字符串处理,并返回字符......
  • rust group
    usestd::fmt::Debug;#[derive(Debug)]structMyData<T:Clone>{data:Vec<T>}impl<T:Clone+Debug>MyData<T>{fngroup_by<F>(&self,pred:F)->MyGroupB......
  • git学习(05)git文件操作
    文件的四种状态版本控制就是对文件的版本控制要对文件进行修改、提交等操作,首先要知道文件当前在什么状态。不然可能会提交了现在还不想提交的文件,或者要提交的文件没......
  • rust f64 比较
      (val1-val2).abs()<f64::EPSILON  val1.to_ne_bytes()==val2.to_ne_bytes()或者 val1.to_bits()==val2.to_bits()......
  • redis五种数据类型及使用场景(转载)
    (19条消息)【Redis】五种数据类型及其使用场景_编程芝士的博客-CSDN博客_redis有几种数据类型......
  • 20220505模拟赛总结(ABC237)
    总结初一第一,竞赛班第二还可以,为了照顾提高班来的四个同学放了四个水题,可惜他们做的不是很理想,希望他们下次可以获得满意的成绩这次做的其实是AtCoderABC237A.NotO......
  • python数据类型
    数据类型 int strbool[] list 列表  存储大量的数据     里面的数据可以更改() tuple  元组  里面写入的数据不能更改 {}dict  ......
  • AGC058(A,B)
    不会。。。https://atcoder.jp/contests/agc058A考虑奇偶位,枚举偶位然后将相邻三个的最大值挪过来即可。B考虑操作不大好搞。从合法答案序列入手每个数只染一个连续......