【问题标题】:Why does `128u8.checked_shl(1)` return `Some(0)`?为什么`128u8.checked_shl(1)`返回`Some(0)`?
【发布时间】:2016-06-16 13:32:33
【问题描述】:

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

我的印象错了吗? 的那个方法是什么?

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

【问题讨论】:

  • 我的猜测是它涵盖了 C 功能,其中移位超过位大小是 UB,但左移被认为更多的是位操作操作而不是算术操作,所以它不被算作算术溢出。但我同意这不一定是唯一明显的选择。

标签: rust integer-overflow


【解决方案1】:

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

None 如果rhs 大于或等于self 中的位数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多