4 #ifndef __STDC_LIMIT_MACROS
5 #define __STDC_LIMIT_MACROS 1
10 static int64_t lls[] = {
11 123ULL, -1LL, -14LL, 14, 1ULL << 63, 0
15 main(int argc, char** argv)
33 C = (char) (argc >= 2)? atoi(argv[1]) : 0x64; /* 100 = 'd' */
34 S = (short) (argc >= 3)? atoi(argv[2]) : -769; /* 0xfcff = -769 */
35 L = (long) (argc >= 4)? atoi(argv[3]) : 0xa3a3a3a3a3a3; /*179923220407203*/
37 /* Test integer to integer conversions */
38 uc1 = (uint8_t) C; /* 100 = 'd' */
39 us1 = (unsigned short) C; /* 100 = 'd' */
40 ui1 = (unsigned int) C; /* 100 = 'd' */
41 ul1 = (unsigned long) C; /* 100 = 'd' */
43 s1 = (short) C; /* 100 = 'd' */
44 i1 = (int) C; /* 100 = 'd' */
45 l1 = (long) C; /* 100 = 'd' */
47 printf("\nCHAR C = '%c' (%d)\t\t(0x%x)\n", C, C, C);
48 printf("char to short s1 = %d\t\t(0x%x)\n", s1, s1);
49 printf("char to int i1 = %d\t\t(0x%x)\n", i1, i1);
50 printf("char to long l1 = %ld\t\t(0x%lx)\n", l1, l1);
52 printf("\nchar to ubyte uc1 = %u\t\t(0x%x)\n", uc1, uc1);
53 printf("char to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
54 printf("char to uint ui1 = %u\t\t(0x%x)\n", ui1, ui1);
55 printf("char to ulong ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
57 uc1 = (uint8_t) S; /* 0xff = 255 */
58 us1 = (unsigned short) S; /* 0xfcff = 64767 */
59 ui1 = (unsigned int) S; /* 0xfffffcff = 4294966527 */
60 ul1 = (unsigned long) S; /* */
62 c1 = (int8_t) S; /* 0xff = -1 */
63 i1 = (int) S; /* 0xfffffcff = -769 */
66 printf("\n\nSHORT S = %d\t\t(0x%x)\n", S, S);
67 printf("short to byte c1 = %d\t\t(0x%x)\n", c1, c1);
68 printf("short to int i1 = %d\t\t(0x%x)\n", i1, i1);
69 printf("short to long l1 = %ld\t\t(0x%lx)\n", l1, l1);
71 printf("\nshort to ubyte uc1 = %u\t\t(0x%x)\n", uc1, uc1);
72 printf("short to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
73 printf("short to uint ui1 = %u\t\t(0x%x)\n", ui1, ui1);
74 printf("short to ulong ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
76 uc1 = (unsigned char) L; /* */
77 c1 = (int8_t) L; /* */
79 us1 = (unsigned short) L; /* */
81 ui1 = (unsigned int) L; /* */
82 ul1 = (unsigned long) L; /* */
84 printf("\n\nLONG L = %ld\t\t(0x%lx)\n", L, L);
85 printf("long to byte c1 = %d\t\t(0x%x)\n", c1, c1);
86 printf("long to short s1 = %d\t\t(0x%x)\n", s1, s1);
87 printf("long to int i1 = %d\t\t(0x%x)\n", i1, i1);
89 printf("\nlong to ubyte uc1 = %u\t\t(0x%x)\n", uc1, uc1);
90 printf("long to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
91 printf("long to uint ui1 = %u\t\t(0x%x)\n", ui1, ui1);
92 printf("long to ulong ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
94 /* Test floating-point to integer conversions */
95 F = (float) (argc >= 4)? atof(argv[3]) : 1.0;
96 D = (argc >= 5)? atof(argv[4]) : 2.0;
98 us1 = (unsigned short) F;
99 ui1 = (unsigned int) F;
100 ul1 = (unsigned long) F;
106 printf("\n\nFLOAT F = %f\n", F);
107 printf("float to short s1 = %d\t\t(0x%x)\n", s1, s1);
108 printf("float to int i1 = %d\t\t(0x%x)\n", i1, i1);
110 printf("float to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
111 printf("float to uint ui1 = %u\t\t(0x%x)\n", ui1, ui1);
112 printf("float to ulong ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
114 us1 = (unsigned short) D;
115 ui1 = (unsigned int) D;
116 ul1 = (unsigned long) D;
122 printf("\n\nDOUBLE D = %f\n", D);
123 printf("double to short s1 = %d\t\t(0x%x)\n", s1, s1);
124 printf("double to int i1 = %d\t\t(0x%x)\n", i1, i1);
125 printf("double to long l1 = %ld\t\t(0x%lx)\n", l1, l1);
127 printf("double to ushort us1 = %u\t\t(0x%x)\n", us1, us1);
128 printf("double to uint ui1 = %u\t\t(0x%x)\n", ui1, ui1);
129 printf("double to ulong ul1 = %lu\t\t(0x%lx)\n", ul1, ul1);
131 for (i = 0; lls[i]; ++i) {
132 printf("double <- long long %lld = %f\n", lls[i], (double)lls[i]);
133 printf("double <- unsigned long long %llu = %f\n",
134 (unsigned long long)lls[i], (double)(unsigned long long)lls[i]);