Binary Representation¶

Question¶

Write a program to display the binary representation of various integers.

Solution¶

```"""
Program to do binary representation of various interesting ints.
"""

def convert_to_binary(n):
binary = []
while n:
binary.append(str(n % 2))
n /= 2
binary.reverse()
return "".join(binary)

for i in range(20, 30):
print((i, convert_to_binary(i)))

hexa_values = ['0', '1', 'A', 'FF', 'DEADBEEF', 'CAFEBABE']

for each in hexa_values:
dec = int(each, 16)
print((each, convert_to_binary(dec)))

"""
Find out if the machine is storing it in the one's complement or two's
complement.
1 is stored as 0000 0001
-1 in 1's complement is 1111 1110
-1 in 2's complement is 1111 1111
"""

import struct

if ord(struct.pack('b', -1)[0]) == 255:
print('twos complement')
else:
print('ones complement')

for i in range(200, 255):
print((hex(i)))

for i in range(0, 256):
print((chr(i), i, hex(i)))

"""
Binary Addition and Subtraction
"""
a = 20
b = 10

a_bin = convert_to_binary(a)
b_bin = convert_to_binary(b)

if len(a_bin) > len(b_bin):
b_bin = b_bin.rjust(len(a_bin), '0')
elif len(a_bin) < len(b_bin):
a_bin = a_bin.rjust(len(b_bin), '0')

def sum_bin(a, b):
rules = {('0', '0'): (0, 0),
('0', '1'): (1, 0),
('1', '0'): (1, 0),
('1', '1'): (0, 1)
}
carry = 0
sum = 0
result = ""
for x, y in zip(reversed(a), reversed(b)):
sum = rules[(x, y)][0]
if carry:
sum = rules[(str(sum), str(carry))][0]
result += str(sum)
carry = rules[(x, y)][1]

if carry:
result += str(1)

return result[::-1]

def sub_bin(a, b):
ones_complement = ""
for c in b:
if c == '0':
ones_complement += '1'
elif c == '1':
ones_complement += '0'

b = ones_complement
b = sum_bin(b, '1'.rjust(len(b), '0'))

rules = {('0', '0'): (0, 0),
('0', '1'): (1, 0),
('1', '0'): (1, 0),
('1', '1'): (0, 1)
}

carry = 0
sum = 0
result = ""
for x, y in zip(reversed(a), reversed(b)):
sum = rules[(x, y)][0]
if carry:
sum = rules[(str(sum), str(carry))][0]
result += str(sum)
carry = rules[(x, y)][1]
# unlike addition carry should be discarded.

return result[::-1]

print(('a', a, a_bin))
print(('b', b, b_bin))

print(('a+b ', sum_bin(a_bin, b_bin)))
print(('a-b ', sub_bin(a_bin, b_bin)))
```