ready_set_boole/src/gray_code.rs

14 lines
269 B
Rust

mod tests;
pub fn gray_code(n: u32) -> u32 {
let mut result: u32 = n & 1 << 31;
for i in (1..32).rev() {
let n_bit = n >> i & 1;
let n_right_bit = n << 1 >> i & 1;
result = result | (n_bit ^ n_right_bit) << i >> 1;
}
result
}