あなたはこのコードを実行すると:大きすぎるビットシフトはRustの未定義の動作であると予想されますか?
#![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);
}
をあなたがコンパイル時や実行時に実行するときにビット長を超えた値と数のビットをシフトすると、異なる動作を生成することを参照してください。
これは正常な動作ですか?それはどこかに文書化されていますか?これはlist of documented undefined behaviorにはありません。
同じパラメータで同じ機能( 'x.shr(Y ) ')は、異なる呼び出しで異なる答えを与えます。これはUBじゃない? – Boiethios
@Boiethios私は、*定義されていない動作*という用語を正しく使用しているかどうかはわかりません。 'random()'(通常は)は異なる呼び出しで異なる答えを返しますが、その動作が定義されていないことを意味するものではありません。 – Shepmaster