Return true if a binary number either contains all zero or all ones on a single flip.(Python)
<p>I got a program where any binary number is considered and with 1 flip of either 0 or 1, if we get all 0s or all 1s, then it returns true else it will return false. </p>

<p>For e.g. 110 on 1 flip of element 0 returns 111 and it is printed as true.
111 is a binary number which on one flip, is printed as false.
Any possible solution of how to solve it?</p>

<p>Looking forward to the best possible solutions. Appreciate if the solution is written using Python.</p>

<p>This is what i had actually done.</p>

<pre><code>def binary(num, length = 4):
    return format(num, '#0{}b'.format(length + 2)).replace('0b', '')
n = binary(125)
n.count('0')
n.count('1')
if (n.count('0') == 1) or (n.count('1') == 1):
    return true
</code></pre>

<p>Actually I had no idea of how to flip it. </p>

<p>So you need to determine whether binary representation of given number contains only one "one" or only one "zero"? There is bit trick to find numbers with single bit set:</p>

<pre><code>if (x == 0) 
   return false
if (x &amp; (x - 1) == 0
   return true
</code></pre>

<p>Explanation: if number looks like <code>b00001000</code>, then decrement gives <code>b00000111</code> and binary AND leads to zero result</p>

<p>For checking single-zero numbers just invert them</p>

<p>if there is no <code>~</code> operator (binary NOT) in Python, you can invert all bits of number with </p>

<pre><code>x_inversion = -(x+1)
</code></pre>

python python-3.x math binary