当您运行此代码时:
你会发现,对于一个值超过位长度的数字进行位移,在编译时和运行时会产生不同的行为。这是正常的行为吗?有文档记录吗?这并没有在记录的未定义行为列表中提到。
#![allow(exceeding_bitshifts)]
fn main() {
const NUMBER: u64 = 0b_10101010;
fn print_shift(i: u32) {
println!("{:b}", NUMBER >> i);
}
print_shift(65);
println!("{:b}", NUMBER >> 65);
}
你会发现,对于一个值超过位长度的数字进行位移,在编译时和运行时会产生不同的行为。这是正常的行为吗?有文档记录吗?这并没有在记录的未定义行为列表中提到。
x.shr(y)
)在不同的调用中给出不同的答案。这不是未定义行为吗? - Boiethiosrandom()
(通常)在不同的调用中返回不同的答案,但这并不意味着它的行为是未定义的。 - Shepmaster