#!/usr/bin/env python # -*- coding: utf-8 -*- """main.py - Extra Credit for CSC-218. - Convert a signed/unsigned decimal value into its binary & hex counter-parts. @author: Nicholas Adamou @date: 10/28/19 """ # Short-hand for: # 0 1 2 3 4 5 6 7 8 9 + A B C D E F hex = [str(i) for i in range(10)] + ["A", "B", "C", "D", "E", "F"] # Converts a decimal to its # binary counter-part (unsigned). def decimal2Binary(decimal): if decimal > 1: # Obtain the first binary bits, by # floor dividing the decimal value by 2. decimal2Binary(decimal // 2) # Print each binary representation of the decimal, # by taking the modulo of the decimal. print(decimal % 2, end='') # Find the binary representation of a negative # number. def TwosComplement(decimal, n=8): # Convert the decimal into its negative counter-part, # through bit shifts and &. # e.g. -10 = -10 & ((2 * 2^8) - 1) = 511 return decimal & (2 << n) - 1 # Convert a decimal value into its # hexadecimal counter-part. def hexa(decimal): s = "" # Loop while decimal exists. while decimal: # Obtain the first hex digit. s += hex[decimal % 16] # Cut the decimal by 16, by # floor dividing itself by 16. decimal //= 16 # Correct the ordering of the hex value, # by reverse slicing the 's' value. return "0x" + s[::-1] if __name__ == '__main__': decimal = 10 # Unsigned # Convert unsigned 'decimal' to BIN. decimal2Binary(decimal) print() # Convert unsigned 'decimal' to Hex. print(hexa(decimal)) signed_decimal = TwosComplement(-decimal) # Signed # Convert unsigned 'decimal' to BIN. decimal2Binary(signed_decimal) print() # Convert unsigned 'decimal' to Hex. print(hexa(signed_decimal))