mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-04-29 20:26:07 -04:00
41 lines
939 B
Python
41 lines
939 B
Python
#!/usr/bin/python3
|
|
# mari von steinkirch @2013
|
|
# steinkirch at gmail
|
|
|
|
''' Clear a bit in a binary number. It is almost like the reverse of set bit:
|
|
1) first create a number filled of 1s, with 0 at i (can create 0001000 and ~)
|
|
2) AND the number so it clears the ith bit
|
|
|
|
>>> num = int('10010000', 2)
|
|
>>> clear_bit(num, 4)
|
|
'0b10000000'
|
|
>>> num = int('10010011', 2)
|
|
>>> clear_all_bits_from_i_to_0(num, 2)
|
|
'0b10010000'
|
|
>>> num = int('1110011', 2)
|
|
>>> clear_all_bits_from_most_sig_to_1(num, 2)
|
|
'0b11'
|
|
'''
|
|
|
|
|
|
|
|
def clear_bit(num, i):
|
|
mask = ~ (1 << i) # -0b10001
|
|
return bin(num & mask)
|
|
|
|
|
|
def clear_all_bits_from_i_to_0(num, i):
|
|
mask = ~ ( (1 << (i+1)) - 1)
|
|
return bin(num & mask)
|
|
|
|
|
|
def clear_all_bits_from_most_sig_to_1(num, i):
|
|
mask = ( 1 << i) -1
|
|
return bin(num & mask)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import doctest
|
|
doctest.testmod()
|
|
|