C Programming - Floating Point Issues - Discussion

Discussion Forum : Floating Point Issues - General Questions (Q.No. 3)
3.
If the binary eauivalent of 5.375 in normalised form is 0100 0000 1010 1100 0000 0000 0000 0000, what will be the output of the program (on intel machine)?
#include<stdio.h>
#include<math.h>
int main()
{
    float a=5.375;
    char *p;
    int i;
    p = (char*)&a;
    for(i=0; i<=3; i++)
        printf("%02x\n", (unsigned char)p[i]);
    return 0;
}
40 AC 00 00
04 CA 00 00
00 00 AC 40
00 00 CA 04
Answer: Option
Explanation:
No answer description is available. Let's discuss.
Discussion:
117 comments Page 11 of 12.

Dheeraj said:   1 decade ago
Why we are using %02x? any one can explain me.

Venkatesh said:   1 decade ago
#include<stdio.h>
int main()
{
int i=1; // i=0001 it will store in memory like this 00000000 00000000 00000000 00000001
char *p; // p is declared as a char pointer
p=(char*)&i; //here integer is typecasting to char i.e. 00000001
00000000
00000000
00000000 and pointer is always points to starting address.
if(*p)
printf("=====little-endian);
else
printf("=====big-endian);
return 0;
}

Anand said:   1 decade ago
Hexadecimal conversion of the variable in the code. That's it nothing more than that.

Tayyaba said:   1 decade ago
@Dheeraj. %02X means 1st two bytes.

Ravi jivani said:   1 decade ago
Its because the memory allocation type which intel CPU supports is little endian, so the last byte of the data stores first in the memory allocation unit. And the starting point of the pointer goes to that address. Its simple, just reverse the byte order of the binary equivalent data of the input value.

Sachin said:   1 decade ago
Intel processor store in reverse order.

Swathi said:   1 decade ago
Can you explain the program for me once again and also the execution part also.

Deepak naik said:   1 decade ago
What is normalised form in C?

Prabhudeva said:   1 decade ago
Foating point base conversion of 5.375 would be
101.01100 00000000 00000000 00000000 00000000 00000000 00000000 10000000.

(char*) will be make it as a character array.
5.375 = 101.01100 00000000 00000000 00000000 00000000 00000000 00000000 10000000.

And coz of unsigned char, it wud be treated as,
p[0] = 00000000 00000000.
p[1] = 00000000 00000000.
p[2] = 10101100 00000000.
p[2] = 00000000 10000000.

=> in hexadecimal form (%02x) :
p[0] = 00.
p[1] = 00.
p[2] = ac.
p[3] = 40.

Manisha Sehgal said:   1 decade ago
Intel chips are usually Little Endian when it comes to store data in data space. But for storing machine code in code segment the same chip is Big Endian.


Post your comments here:

Your comments will be displayed after verification.