## 1318. Minimum Flips to Make a OR b Equal to c

Given 3 positives numbers `a`, `b` and `c`. Return the minimum flips required in some bits of `a` and `b` to make ( `a` OR `b` == `c` ). (bitwise OR operation).
Flip operation consists of change any single bit 1 to 0 or change the bit 0 to 1 in their binary representation.

Example 1:

```Input: a = 2, b = 6, c = 5
Output: 3
Explanation: After flips a = 1 , b = 4 , c = 5 such that (`a` OR `b` == `c`)```

Example 2:

```Input: a = 4, b = 2, c = 7
Output: 1
```

Example 3:

```Input: a = 1, b = 2, c = 3
Output: 0
```

Constraints:

• `1 <= a <= 10^9`
• `1 <= b <= 10^9`
• `1 <= c <= 10^9`

## Rust Solution

``````struct Solution;

impl Solution {
fn min_flips(a: i32, b: i32, c: i32) -> i32 {
let mut res = 0;
for i in 0..32 {
let aa = (a >> i) & 1;
let bb = (b >> i) & 1;
let cc = (c >> i) & 1;
if cc == 0 {
if aa == 1 {
res += 1;
}
if bb == 1 {
res += 1;
}
} else {
if aa == 0 && bb == 0 {
res += 1;
}
}
}
res
}
}

#[test]
fn test() {
let a = 2;
let b = 6;
let c = 5;
let res = 3;
assert_eq!(Solution::min_flips(a, b, c), res);
let a = 4;
let b = 2;
let c = 7;
let res = 1;
assert_eq!(Solution::min_flips(a, b, c), res);
let a = 1;
let b = 2;
let c = 3;
let res = 0;
assert_eq!(Solution::min_flips(a, b, c), res);
let a = 8;
let b = 3;
let c = 5;
let res = 3;
assert_eq!(Solution::min_flips(a, b, c), res);
}
``````

Having problems with this solution? Click here to submit an issue on github.