Memory representation of double in C

Memory representation of double in c programming language

Size of double is 64 bit. This is used as:

1. 52 bit: for mantissa
2. 11 bit: for exponent (including one signed bit of exponent)
3. 1 bit: for signed bit of mantissa

Memory representation of: double a = -3.3;

For this you have to follow following steps:

Step1: convert the number (3.3) into binary form binary value of 3.3 is 11.0100110011001100110011001100110011…

Step2: convert the binary number in the scientific form
11.0100110011001100110011001100110011… = 1.10100110011001100110011001100110011…*10^1

Step3: find exponent and mantissa and signed bit
Mantissa = .1010 01100110 01100110 01100110 01100110 01100110 01100110 (only first 52 bit)
Exponent= 1
Signed bit =1 (Since a is negative number)

Step4: store 1 in the signed bit (green color in the figure)

Step 5: Add 1023 in the exponent and convert in the binary number form (since in 10 bit of exponent except signed bit maximum possible number is 1111111111)
Exponent= 1023+1=1024
Binary form of 1024 is 10000000000
Store first 4 bit i.e. 0000 at the 0 to 3 position of exponent. (In figure represented as blue color digit)
Store rest 7 bit at 4 to 10 bit of exponent from right to left (in figure blue color 4 to 10)

Step 6: store the 52 bit mantissa at 1 to 52 bit position in as shown in figure .Store 1st bit of mantissa (from right to left ) i.e. 1 at the position 1 of mantissa as in figure ,2nd bit of mantissa i.e. 0 at the position 2 of mantissa as in figure and so on. In the memory -3.3 is represented as

If you have any questions on above Memory representation of double in c, you can ask here.


vinod kumar Prajapati said...

where to put sign bit of Exponent

Thomas Lourseyre said...

@vinod kumar Prajapati : This is why you add 1023 to the exponent : so that negative exponents are convertible (e.g. if your exponent is -2, you will store 1023-2=1021). Why we do that and don't just put a signed bit ? Because it's the standard.