Binary Representation

Question

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

Solution

#!/usr/bin/python
"""
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)
Run this
Comments by Disqus