修正关于补码的不一致表达

Signed-off-by: Sefank <12670778+Sefank@users.noreply.github.com>
pull/230/head
Sefank 3 years ago
parent e739c354ec
commit 4d380ddb88
No known key found for this signature in database
GPG Key ID: 8257999DC508E901

@ -48,11 +48,11 @@ Rust使用一个相对传统的语法来创建整数(`1`,`2`,...)和浮点数(`1
>
> 比方说有一个 `u8` ,它可以存放从 0 到 255 的值。那么当你将其修改为范围之外的值,比如 256则会发生**整型溢出**。关于这一行为 Rust 有一些有趣的规则:当在 debug 模式编译时Rust 会检查整型溢出,若存在这些问题,则使程序在编译时 *panic*(崩溃,Rust 使用这个术语来表明程序因错误而退出)。
>
> 在当使用 `--release` 参数进行 release 模式构建时Rust **不**检测溢出。相反当检测到整型溢出时Rust 会进行一种被称为二进制补码的方式进行(*twos complement wrapping*)操作。简而言之,大于该类型最大值的数值会被补码转换成该类型能够支持的对应数字的最小值。比如在 `u8` 的情况下256 变成 0257 变成 1依此类推。程序不会 panic但是该变量的值可能不是你期望的值。依赖整型溢出的行为不是一种正确的做法
> 在当使用 `--release` 参数进行 release 模式构建时Rust **不**检测溢出。相反当检测到整型溢出时Rust 会按照补码循环溢出(*twos complement wrapping*)的规则处理。简而言之,大于该类型最大值的数值会被补码转换成该类型能够支持的对应数字的最小值。比如在 `u8` 的情况下256 变成 0257 变成 1依此类推。程序不会 panic但是该变量的值可能不是你期望的值。依赖这种默认行为的代码都应该被认为是错误的代码
>
> 要显式处理溢出的可能性,可以使用标准库针对原始数字类型提供的以下的一系列方法:
> 要显式处理可能的溢出,可以使用标准库针对原始数字类型提供的这些方法:
>
> - 使用 `wrapping_*` 方法在所有模式下进行包裹,例如 `wrapping_add`
> - 使用 `wrapping_*` 方法在所有模式下都按照补码循环溢出规则处理,例如 `wrapping_add`
> - 如果使用 `checked_*` 方法时发生溢出,则返回 `None`
> - 使用 `overflowing_*` 方法返回该值和一个指示是否存在溢出的布尔值
> - 使用 `saturating_*` 方法使值达到最小值或最大值

Loading…
Cancel
Save