-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUnionTest
More file actions
66 lines (51 loc) · 1.23 KB
/
UnionTest
File metadata and controls
66 lines (51 loc) · 1.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <stdio.h>
void printBinary(int n, int i)
{
// Prints the binary representation
// of a number n up to i-bits.
int k;
for (k = i - 1; k >= 0; k--) {
if ((n >> k) & 1)
printf("1");
else
printf("0");
}
}
typedef union {
double d;
struct
{
// Order is important.
// Here the members of the union data structure
// use the same memory (32 bits).
// The ordering is taken
// from the LSB to the MSB.
unsigned long long int mantissa : 52;
unsigned long long int exponent : 11;
unsigned long long int sign : 1;
} raw;
} mydouble;
// Function to convert real value
// to IEEE foating point representation
void printIEEE(mydouble var)
{
// Prints the IEEE 754 representation
// of a float value (32 bits)
printBinary(var.raw.sign, 1);
printf(" | ");
printBinary(var.raw.exponent, 11);
printf(" | ");
printBinary(var.raw.mantissa, 52);
printf("\n");
}
// Driver Code
int main()
{
// Instantiate the union
mydouble var;
// Get the real value
var.d = 85,125;
// Get the IEEE floating point representation
printIEEE(var);
return 0;
}