在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/