25{
26 unsigned long dummy;
27 unsigned char *p;
28 float f;
30
31 printf("Data sizes:\n");
32 printf("sizeof(int) = %d\n", (int)sizeof(int));
33 printf("sizeof(float) = %d\n", (int)sizeof(float));
34 printf("sizeof(double) = %d\n", (int)sizeof(double));
35 printf("sizeof(long int) = %d\n", (int)sizeof(long int));
36 printf("sizeof(long double) = %d\n", (int)sizeof(long double));
37 printf("sizeof(char *) = %d\n", (int)sizeof(p));
38 if (sizeof(p) == 2)
39 printf("...this looks like a 16-bit OS\n\n");
40 else if (sizeof(p) == 4)
41 printf("...this looks like a 32-bit OS\n\n");
42 else if (sizeof(p) == 8)
43 printf("...this looks like a 64-bit OS\n\n");
44
45 printf("Byte order:\n");
46 dummy = 0x12345678;
47 p = (unsigned char *) &dummy;
48 printf("0x12345678 = %02X %02X %02X %02X\n", p[0], p[1], p[2], p[3]);
49 if (*((unsigned char *) &dummy) == 0x78)
50 printf("...this looks like a LITTLE ENDIAN machine\n\n");
51 else
52 printf("...this looks like a BIG ENDIAN machine\n\n");
53
54 printf("Floating point coding:\n");
55 f = (float) 1.2345;
56 p = (unsigned char *) &f;
57 printf("1.2345f = ");
58 for (
unsigned i = 0;
i <
sizeof(float);
i++)
59 printf(
"%02X ", p[
i]);
60 printf("\n");
62 p = (
unsigned char *) &
d;
63 printf("1.2345d = ");
64 for (
unsigned i = 0;
i <
sizeof(double);
i++)
65 printf(
"%02X ", p[
i]);
66 printf("\n");
67
68 dummy = 0;
69 memcpy(&dummy, &f, sizeof(f));
70 if ((dummy & 0xFF) == 0x19 &&
71 ((dummy >> 8) & 0xFF) == 0x04 &&
72 ((dummy >> 16) & 0xFF) == 0x9E && ((dummy >> 24) & 0xFF) == 0x3F)
73 printf("...this looks like IEEE float format\n");
74 else if ((dummy & 0xFF) == 0x9E &&
75 ((dummy >> 8) & 0xFF) == 0x40 &&
76 ((dummy >> 16) & 0xFF) == 0x19 && ((dummy >> 24) & 0xFF) == 0x04)
77 printf("...this looks like VAX float format\n");
78
79 dummy = 0;
80 memcpy(&dummy, &
d,
sizeof(f));
81 if ((dummy & 0xFF) == 0x8D &&
82 ((dummy >> 8) & 0xFF) == 0x97 &&
83 ((dummy >> 16) & 0xFF) == 0x6E && ((dummy >> 24) & 0xFF) == 0x12)
84 printf("...this looks like IEEE double float format (little endian)\n\n");
85 else if ((dummy & 0xFF) == 0x83 &&
86 ((dummy >> 8) & 0xFF) == 0xC0 &&
87 ((dummy >> 16) & 0xFF) == 0xF3 && ((dummy >> 24) & 0xFF) == 0x3F)
88 printf("...this looks like IEEE double float format (big endian)\n\n");
89 else if ((dummy & 0xFF) == 0x13 &&
90 ((dummy >> 8) & 0xFF) == 0x40 &&
91 ((dummy >> 16) & 0xFF) == 0x83 && ((dummy >> 24) & 0xFF) == 0xC0)
92 printf("...this looks like VAX G double format\n\n");
93 else if ((dummy & 0xFF) == 0x9E &&
94 ((dummy >> 8) & 0xFF) == 0x40 &&
95 ((dummy >> 16) & 0xFF) == 0x18 && ((dummy >> 24) & 0xFF) == 0x04)
96 printf("...this looks like VAX D double format\n\n");
97
98
100 printf(
"Structure members are %d-byte aligned\n\n",
i);
101
102 return 1;
103}