mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-05-22 08:21:12 -04:00
Add some cool queue, stacks, strings, math, bit manipulation examples (#35)
This commit is contained in:
parent
f3ee2cdf52
commit
0f455a0322
24 changed files with 932 additions and 13 deletions
|
@ -0,0 +1,25 @@
|
|||
## bit manipulation
|
||||
|
||||
<br>
|
||||
|
||||
### `playing_with_bits.py`
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
```python
|
||||
> python3 playing_with_bits.py
|
||||
|
||||
Integer number: 144
|
||||
Binary number: 10010000
|
||||
|
||||
Update bit: 0b10010100
|
||||
Set bit: 0b10010100
|
||||
Clear bit: 0b10000000
|
||||
|
||||
I: 144, I2: 90
|
||||
B: 10010000, B2: 01011010
|
||||
Count bits swapped: 4
|
||||
|
||||
Swap bit in place: (90, 144)
|
||||
```
|
59
bit_manipulation/playing_with_bits.py
Normal file
59
bit_manipulation/playing_with_bits.py
Normal file
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# author: bt3gl
|
||||
|
||||
|
||||
def set_bit(num, i):
|
||||
mask = 1 << i
|
||||
return bin( num | mask )
|
||||
|
||||
def update_bit(num, i, v):
|
||||
mask = ~ (1 << i)
|
||||
return bin( (num & mask) | (v << i) )
|
||||
|
||||
def count_bits_swapped(a, b):
|
||||
count = 0
|
||||
m = a^b
|
||||
while m:
|
||||
count +=1
|
||||
m = m & (m-1)
|
||||
return count
|
||||
|
||||
def clear_bit(num, i):
|
||||
mask = ~ (1 << i) # -0b10001
|
||||
return bin(num & mask)
|
||||
|
||||
def swap_bit_in_place(a, b):
|
||||
a = a^b
|
||||
b = a^b
|
||||
a = a^b
|
||||
return a, b
|
||||
|
||||
def find_how_many_1_in_a_binary(num):
|
||||
|
||||
counter = 0
|
||||
while num:
|
||||
if num & 1:
|
||||
counter += 1
|
||||
num >>= 1
|
||||
return counter
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
binary_number = '10010000'
|
||||
binary_number2 = '01011010'
|
||||
integer_number = int(binary_number, 2)
|
||||
integer_number2 = int(binary_number2, 2)
|
||||
|
||||
print(f'Integer number: {integer_number}')
|
||||
print(f'Binary number: {binary_number}')
|
||||
print(f'\nUpdate bit: {update_bit(integer_number, 2, 1)}')
|
||||
print(f'Set bit: {set_bit(integer_number, 2)}')
|
||||
print(f'Clear bit: {clear_bit(integer_number, 4)}')
|
||||
print(f'\nI: {integer_number}, I2: {integer_number2}')
|
||||
print(f'B: {binary_number}, B2: {binary_number2}')
|
||||
print(f'Count bits swapped: {count_bits_swapped(integer_number, integer_number2)}')
|
||||
print(f'\nSwap bit in place: {swap_bit_in_place(integer_number, integer_number2)}')
|
||||
print(f'Find how many 1 in a binary: {find_how_many_1_in_a_binary(integer_number)}')
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue