This commit is contained in:
murphy 2017-05-24 01:00:39 +08:00
parent 8457b27357
commit 2e52c5aba5

View File

@ -6,7 +6,7 @@
在 Rust 中,任何值都属于一种明确的**类型***type*声明它被指定了何种数据以便明确其处理方式。我们将分两部分探讨一些内建类型标量scalar和复合compound 在 Rust 中,任何值都属于一种明确的**类型***type*声明它被指定了何种数据以便明确其处理方式。我们将分两部分探讨一些内建类型标量scalar和复合compound
Rust 是一个**静态类型***statically typed*)语言,也就是说在编译时就须要知道所有变量的类型,这一认知将贯穿整个章节,请在头脑中保持。通过值的形式及其使用方式,编译器通常可以推断出我们想要用的类型。多种类型均有可能,比如第二章中使用 `parse``String` 转换为数字类型,必须增加类型注解,像这样: Rust 是**静态类型***statically typed*)语言,也就是说在编译时就需要知道所有变量的类型,这一认知将贯穿整个章节,请在头脑中明确。通过值的形式及其使用方式,编译器通常可以推断出我们想要用的类型。多种类型均有可能,比如第二章中使用 `parse``String` 转换为数字,必须增加类型注解,像这样:
```rust ```rust
let guess: u32 = "42".parse().expect("Not a number!"); let guess: u32 = "42".parse().expect("Not a number!");
@ -44,13 +44,13 @@ error[E0282]: unable to infer enough type information about `_`
| 64-bit | i64 | u64 | | 64-bit | i64 | u64 |
| arch | isize | usize | | arch | isize | usize |
每一种变体都可以是有符号或无符号的,并有一个明确的大小。有符号和无符号代表数字能否为负值;换句话说,数字是否需要有一个符号(有符号数),或者永远为正而不需要符号(无符号数)。这有点像在纸上书写数字:当需要考虑符号的时候,数字前面会加上一个加号或减号;然而,当可以安全地假设为正数时,可以不带符号(加号)。有符号数以二进制补码形式twos complement representation存储如果你不清楚这是什么可以在网上搜索对其的解释超出了本书的范畴 每一种变体都可以是有符号或无符号的,并有一个明确的大小。有符号和无符号代表数字能否为负值;换句话说,数字是否需要有一个符号(有符号数),或者永远为正而不需要符号(无符号数)。这有点像在纸上书写数字:当需要考虑符号的时候,数字以加号或减号作为前缀;然而,可以安全地假设为正数时,加号前缀通常省略。有符号数以二进制补码形式twos complement representation存储如果你不清楚这是什么可以在网上搜索对其的解释超出了本书的范畴
每一个有符号的变体可以储存包含从 -(2<sup>n - 1</sup>) 到 2<sup>n - 1</sup> - 1 在内的数字,这里 `n` 是变体使用的位数。所以 `i8` 可以储存从 -(2<sup>7</sup>) 到 2<sup>7</sup> - 1 在内的数字,也就是从 -128 到 127。无符号的变体可以储存从 0 到 2<sup>n</sup> - 1 的数字,所以 `u8` 可以储存从 0 到 2<sup>8</sup> - 1 的数字,也就是从 0 到 255。 每一个有符号的变体可以储存包含从 -(2<sup>n - 1</sup>) 到 2<sup>n - 1</sup> - 1 在内的数字,这里 `n` 是变体使用的位数。所以 `i8` 可以储存从 -(2<sup>7</sup>) 到 2<sup>7</sup> - 1 在内的数字,也就是从 -128 到 127。无符号的变体可以储存从 0 到 2<sup>n</sup> - 1 的数字,所以 `u8` 可以储存从 0 到 2<sup>8</sup> - 1 的数字,也就是从 0 到 255。
另外,`isize` 和 `usize` 类型依赖运行程序的计算机架构64 位架构上他们是 64 位的, 32 位架构上他们是 32 位的。 另外,`isize` 和 `usize` 类型依赖运行程序的计算机架构64 位架构上他们是 64 位的, 32 位架构上他们是 32 位的。
可以使用表格 3-2 中的任何一种形式编写数字字面值。注意字节以外的字面值允许使用类型后缀,例如 `57u8`可以使用 `_` 做为分隔符以方便读数,例如 `1_000` (分隔符的数量与位置并不影响实际的数字)。 可以使用表格 3-2 中的任何一种形式编写数字字面值。除字节以外的其它字面值允许使用类型后缀,例如 `57u8`允许使用 `_` 做为分隔符以方便读数,例如 `1_000` (分隔符的数量与位置并不影响实际的数字)。
<span class="caption">Table 3-2: Integer Literals in Rust</span> <span class="caption">Table 3-2: Integer Literals in Rust</span>
@ -62,7 +62,7 @@ error[E0282]: unable to infer enough type information about `_`
| Binary | `0b1111_0000` | | Binary | `0b1111_0000` |
| Byte (`u8` only) | `b'A'` | | Byte (`u8` only) | `b'A'` |
那么该使用哪种类型的数字呢如果拿不定主意Rust 的默认类型通常就是很好的选择,数字类型默认是 `i32`:它通常是最快的,甚至在 64 位系统上也是。`isize` 或 `usize` 的主要使用场景是作为集合的索引。 那么该使用哪种类型的数字呢如果拿不定主意Rust 的默认类型通常就是很好,数字类型默认是 `i32`:它通常是最快的,甚至在 64 位系统上也是。`isize` 或 `usize` 的主要作为集合的索引。
#### 浮点型 #### 浮点型