在Rust中定义了在C中产生未定义行为的整数操作。一个共同的主题是,它们在 Debug模式下会出现 panic ,而在 Release模式下会产生已定义的非 panic 结果。例如,有符号整数溢出在 Debug模式下会发生 panic ,但在 Release模式下会发生包装。还定义了运算符变体,例如wrapping_add()saturating_add()等。

但是,如何转移负值呢?这是C语言中未定义的行为。

以下测试用例在Rust 1.17.0中成功完成:

#[test]
fn negative_shift() {
    let i = -128i8;
    let j = i << 1;
    assert_eq!(j, 0);
}

尽管成功了,但是它仍然可能是不确定的行为...

最佳答案

Rust Reference具有list of all undefined behavior。不在列表中左移带符号的数字超出类型的大小。

关于rust - 在Rust中向左移负值会导致不确定的行为吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43822297/

10-11 23:02
查看更多