Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 为什么'128u8.checked_shl(1)'返回'Some(0)`?_Rust_Integer Overflow - Fatal编程技术网

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

Rust 为什么'128u8.checked_shl(1)'返回'Some(0)`?,rust,integer-overflow,Rust,Integer Overflow,我的印象是,整数类型的.checked.*(\u)方法有助于避免溢出。但是,.checked_shl(u32)方法很高兴地将上述示例的最后一位移出 我的印象不对吗?那是什么方法 (还想补充一点,为了避免轮班溢出,可以检查((~0)>>rhs)>=self,至少对于无符号类型是如此),因为它只检查轮班数量。从 None如果rhs大于或等于self中的位数 因此,通过设计,它允许您移出位,但不允许您使用无效的移位量(或者,它允许您,但您得到None)。,因为它只检查移位量。从 None如果rhs大于

我的印象是,整数类型的
.checked.*(\u)
方法有助于避免溢出。但是,
.checked_shl(u32)
方法很高兴地将上述示例的最后一位移出

我的印象不对吗?那是什么方法


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

,因为它只检查轮班数量。从

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


因此,通过设计,它允许您移出位,但不允许您使用无效的移位量(或者,它允许您,但您得到
None
)。

,因为它只检查移位量。从

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


因此,通过设计,它允许您移出位,它只是不允许您使用无效的移位量(或者,它允许您,但您得到的是
None
)。

我的猜测是,它涵盖了C特性,其中移位超过位大小是UB,但左移位被认为更像是位操作,而不是算术操作,所以它不算作算术溢出。但我同意这不一定是唯一明显的选择。我的猜测是,它涵盖了C特性,其中移位大于位大小是UB,但左移位被认为更像是位操作,而不是算术操作,因此它不算作算术溢出。但我同意这不一定是唯一显而易见的选择。