rust - 为什么 `128u8.checked_shl(1)` 返回 `Some(0)` ?

标签 rust integer-overflow

我的印象是整数类型的 .checked_*(_) 方法可以帮助避免溢出。然而,.checked_shl(u32) 方法愉快地移出了上面示例的最后一位。

我的印象有误吗?该方法用于什么?

(还想补充一点以避免轮类溢出,至少对于无符号类型,可以检查是否 ((~0) >> rhs) >= self)

最佳答案

因为它只检查偏移量。来自docs ,

None if rhs is larger than or equal to the number of bits in self.

所以根据设计,它允许您移出位,它只是不允许您使用无效的移位量(或者,它允许您,但您得到 None)。

关于rust - 为什么 `128u8.checked_shl(1)` 返回 `Some(0)` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37860831/

相关文章:

c++ - 在 C++ 中查找大乘法的余数

c - 如果 LONG_MAX 为 2147483647,strtol ("-2147483648", 0, 0) 是否溢出?

distributed - Raft集群中的日志索引和日志项变量是否可以无限增长?

c++ - 为什么我的输出是负数?我要乘2个正数?

rust - rustup 安装到哪里?

json - 如何使用 Serde 反序列化带有自定义函数的可选字段?

rust - 指定参数的生命周期持续函数调用

rust - 使用 Box 分配大型数组时,线程 '<main>' 已溢出其堆栈

rust - 带有运行时定义成员的标记联合

tensorflow - Tensorflow 中的 log(1+exp(X))(避免欠流和溢流)