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;
}
Discussion:
117 comments Page 9 of 12.
Hajmal said:
1 decade ago
Thanks divya.
Ravi ranjan said:
1 decade ago
Preethi is good.
Jisha sankar said:
1 decade ago
Thanks preethi.
Chithra said:
1 decade ago
Thanks preethi and pradeep.
Er.Nitesh mathur said:
1 decade ago
Preethi is wrong because. Defination is given by preethi is totally wrong.
" Big ENDIAN" byte order-> the higher order byte of number is stored in lowest address. The result is written from top to bottom.
" LITTLE ENDIAN"-> byte order, the higher order byte of number is stored in higher address. The result is written from bottom to top.
" Big ENDIAN" byte order-> the higher order byte of number is stored in lowest address. The result is written from top to bottom.
" LITTLE ENDIAN"-> byte order, the higher order byte of number is stored in higher address. The result is written from bottom to top.
Ragini said:
1 decade ago
Thanks preeti.
Bhaskar said:
1 decade ago
Binary equivalent of 5.375 in normalised form is
0100 -> 4
0000 -> 0
1010 -> A
1100 -> C
0000 -> 0
0000 -> 0
0000 -> 0
0000 -> 0
Since the PC's (intel processors) use " LITTLE ENDIAN" byte order, the higher order byte of number is stored in lowest address. The result is written from bottom to top.
0100 -> 4
0000 -> 0
1010 -> A
1100 -> C
0000 -> 0
0000 -> 0
0000 -> 0
0000 -> 0
Since the PC's (intel processors) use " LITTLE ENDIAN" byte order, the higher order byte of number is stored in lowest address. The result is written from bottom to top.
Suvidha said:
1 decade ago
In the statement p= (char*) &a; we are doing type casting since p is a char pointer you cannot assign float variable to it a pointer variable can hold the address of another variable only if the variable has the same data type of that as pointer variable.
Nazia said:
1 decade ago
The format string used for each of the prints is %02X, which I've always interpreted as 'print the supplied int as a hexadecimal value with at least two digits'.
Shyam said:
1 decade ago
Understand the memory you will understand it easy
Used is little endian type of memory storage i.e., higher byte at lower address
Data:40 AC 00 00
100:40
101:AC
102:00
103:00
Now pointer to memory location points to 103
If it is used as character pointer it grabs a byte as char pointer is capable of handling only value of its size
On the other end if a integer pointer is used it would give output same as it is
For detailed view try this example,
int x=Ox12345678;
char *cp;
short int *sip;
int *ip;
ip=sip=cp=&x;
printf("%x %x %x",*cp,*sip,*ip);
O/P:0x78 0x5678 0x12345678
Used is little endian type of memory storage i.e., higher byte at lower address
Data:40 AC 00 00
100:40
101:AC
102:00
103:00
Now pointer to memory location points to 103
If it is used as character pointer it grabs a byte as char pointer is capable of handling only value of its size
On the other end if a integer pointer is used it would give output same as it is
For detailed view try this example,
int x=Ox12345678;
char *cp;
short int *sip;
int *ip;
ip=sip=cp=&x;
printf("%x %x %x",*cp,*sip,*ip);
O/P:0x78 0x5678 0x12345678
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers