CS1500 Algorithms and Data Structures for Engineering, FALL 2012

 LAB 6:Binary representation

In this assignment you are to implement 4 functions that convert integer/double to binary representation (string of 0/1-s) and viceversa. While you can figure this out from the representation algorithm(here, here, here) in this lab you are simply required to write some input in memory, and then read it to get a different representation. For example: to convert a stream of 64 bits to double, you can write the appropriate address of memory with the 0/1 bit values, then tell C++ to interpret the  64 bits as a double. It will do the conversion itself.

A) int convert_char_to_int(char*)
Read a string of bits : validate that each character is a either 0 or 1, and also validate that the string has exactly 32 chars in it (in position index=32 you should have the value of 0, which marks the end of the string). Interpret the sequence of bits as an 32-bits signed integer,  and return the integer number equivalent.
Examples:
8        = 00010000 00000000 00000000 00000000
261    = 10100000 10000000 00000000 00000000

B) double convert_char_to_double(char*)
Same as before, but this time it is a double representation (mantissa and exponent). Interpret the sequence of bits as an double number on 64 bits,  and return the decimal number equivalent.

C) char* convert_int_to_char(int)
Conversely, take an integer and output its 32-bit representation as as string of 32 characters, each 0 or 1. Make sure your function works properly for negative numbers.
Hint: use the shift operator (>>).

D) char* convert_double_to_char(int)
Conversely, take a double and output its 8bytes=64-bit representation as as string of 64 characters, each 0 or 1. The bit representation is the one using mantissa and exponent.


HINT:You can  implement first the following two functions:
char* read_the_bits(char* x, int size)to read bits from a given address
void write_the_bits(char* x, void* add, int size) to write the given bits at a given address
A good idea is to set size=8, meaning read/write 8 bits at a time.