ToB企服应用市场:ToB评测及商务社交产业平台

标题: 数据类型 [打印本页]

作者: 刘俊凯    时间: 2024-10-15 20:17
标题: 数据类型
Rust 是 静态类型 (statically typed) 语言,也就是说在编译时就必须知道全部变量的类型
使用 parse 将 String 转换为数字时,必须增加类型注解,像这样:
  1. let guess: u32 = "42".parse().expect("Not a number!");
复制代码
如果不像上面的代码这样添加类型注解 : u32 ,Rust 会表现如下错误,这阐明编译器必要我们提供更多信息,来了解我们想要的类型:
  1. $ cargo build
  2.    Compiling no_type_annotations v0.1.0 (file:///projects/no_type_annotations)
  3. error[E0284]: type annotations needed
  4. --> src/main.rs:2:9
  5.   |
  6. 2 |     let guess = "42".parse().expect("Not a number!");
  7.   |         ^^^^^        ----- type must be known at this point
  8.   |
  9.   = note: cannot satisfy `<_ as FromStr>::Err == _`
  10. help: consider giving `guess` an explicit type
  11.   |
  12. 2 |     let guess: /* Type */ = "42".parse().expect("Not a number!");
  13.   |              ++++++++++++
  14. For more information about this error, try `rustc --explain E0284`.
  15. error: could not compile `no_type_annotations` (bin "no_type_annotations") due to 1 previous error
复制代码
标量类型

Rust 有四种基本的标量类型:整型、浮点型、布尔类型和字符类型。
整型

整数是一个没有小数部分的数字,i 开头的是有符号数,u 开头的是无符号数。有符号无符号 代表数字能否为负值,换句话说,这个数字是否有可能是负数(有符号数),或者永远为正而不必要符号(无符号数)。
有符号数以补码形式(two’s complement representation) 存储。
长度有符号无符号8-biti8u816-biti16u1632-biti32u3264-biti64u64128-biti128u128archisizeusizeisize 和 usize 类型依靠运行程序的计算机架构:64 位架构上它们是 64 位的,32 位架构上它们是 32 位的。
可以使用表格中的任何一种形式编写数字字面值。请注意可以是多种数字类型的数字字面值允许使用类型后缀,例如 57u8 来指定类型,同时也允许使用 _ 做为分隔符以方便读数,例如1_000,它的值与你指定的 1000 雷同。
Rust 数字类型默认是 i32。 isize 或 usize 重要作为某些聚集的索引。
整型溢出
比方说有一个 u8 ,它可以存放从零到 255 的值。那么当你将其修改为 256 时会发生什么呢?这被称为 “整型溢出”(“integer overflow” ),这会导致以下两种行为之一的发生。当在 debug 模式编译时,Rust 检查这类问题并使程序 panic,这个术语被 Rust 用来表明程序因错误而退出。
使用 --release flag 在 release 模式中构建时,Rust 不会检测会导致 panic 的整型溢出。相反发生整型溢出时,Rust 会进行一种被称为二进制补码 wrapping(two’s complement wrapping)的操作。简而言之,比此类型能容纳最大值还大的值会回绕到最小值,值 256 酿成 0,值 257 酿成 1,依此类推。程序不会 panic,不过变量可能也不会是你所期望的值。依靠整型溢出 wrapping 的行为被认为是一种错误。
为了显式地处理溢出的可能性,可以使用这几类标准库提供的原始数字类型方法:
浮点型

Rust 也有两个原生的 浮点数(floating-point numbers)类型,它们是带小数点的数字。Rust 的浮点数类型是 f32 和 f64,分别占 32 位和 64 位。默认类型是 f64,因为在现代 CPU 中,它与 f32 速度几乎一样,不过精度更高。全部的浮点型都是有符号的。
  1. fn main() {
  2.     let x = 2.0; // f64
  3.     let y: f32 = 3.0; // f32
  4. }
复制代码
浮点数采用 IEEE-754 标准表示。f32 是单精度浮点数,f64 是双精度浮点数。
数值运算

Rust 中的全部数字类型都支持基本数学运算:加法、减法、乘法、除法和取余。整数除法会向零舍入到最靠近的整数。下面的代码展示了怎样在 let 语句中使用它们:
  1. fn main() {
  2.     // addition
  3.     let sum = 5 + 10;
  4.     // subtraction
  5.     let difference = 95.5 - 4.3;
  6.     // multiplication
  7.     let product = 4 * 30;
  8.     // division
  9.     let quotient = 56.7 / 32.2;
  10.     let truncated = -5 / 3; // 结果为 -1
  11.     // remainder
  12.     let remainder = 43 % 5;
  13. }
复制代码
布尔型

Rust 中的布尔类型有两个可能的值:true 和 false
  1. fn main() {
  2.     let t = true;
  3.     let f: bool = false; // with explicit type annotation
  4. }
复制代码
字符类型

Rust 的 char 类型是语言中最原生的字母类型
[code]fn main() {    let c = 'z';    let z: char = 'ℤ'; // with explicit type annotation    let heart_eyed_cat = '
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4