diff --git a/rs/bitwise-and-of-numbers-range.rs b/rs/bitwise-and-of-numbers-range.rs new file mode 100644 index 0000000..0d66472 --- /dev/null +++ b/rs/bitwise-and-of-numbers-range.rs @@ -0,0 +1,21 @@ +impl Solution { + fn discarded(mut left: i32, mut right: i32) -> i32 { + let mut counter = 0; + + while left != right { + left >>= 1; + right >>= 1; + + counter += 1; + } + + counter + } + + pub fn range_bitwise_and(left: i32, right: i32) -> i32 { + let discarded_bits = Solution::discarded(left, right); + let mask = !((1 << discarded_bits) - 1); + + left & mask + } +}