首页 > 解决方案 > 当整数算术运算溢出时,Rust 编程语言会发生什么?

问题描述

据我所知,在 C 编程语言(和许多基于 C 的语言)中,当算术运算在 N 位整数上溢出时,此溢出会将结果缩短为 2 的 N 次幂,仅保留 LSB 的结果。

当这样的整数算术运算在 Rust 编程语言中溢出时会发生什么。

标签: rustinteger-overflow

解决方案


当你在调试模式下编译时,Rust 会检查整数溢出,如果发生这种行为会导致你的程序在运行时崩溃。

当您使用--release标志在发布模式下编译时,Rust 不包括对导致恐慌的整数溢出的检查。对于有符号值,结果基于二进制补码包装。对于无符号值,结果是类型的最大值 + 1 的模。

标准库有许多函数可以更好地控制溢出情况下应该发生的情况,例如 、checked_addwrapping_add其他一些变体。

如果您还没有,我建议您阅读The Rust Programming Language,其中有一专门解决了这个问题。


推荐阅读