Blob


1 /*
2 * 2-1. Write a program to determine the ranges of char, short, int, and long variables, both signed and unsigned, by printing appropriate values from standard headers and by direct computation. Harder if you compute them: determine the ranges of the various floating-point types.
3 */
5 #include <stdio.h>
6 #include <limits.h>
8 main()
9 {
10 char c; unsigned char uc;
11 short s; unsigned short us;
12 int i; unsigned int ui;
13 long l; unsigned long ul;
14 long long ll; unsigned long long ull;
15 int cwidth, swidth, iwidth, lwidth, llwidth;
16 for (c = 1, cwidth = 1; c > 0; c <<= 1, ++cwidth)
17 ;
18 for (s = 1, swidth = 1; s > 0; s <<= 1, ++swidth)
19 ;
20 for (i = 1, iwidth = 1; i > 0; i <<= 1, ++iwidth)
21 ;
22 for (l = 1, lwidth = 1; l > 0; l <<= 1, ++lwidth)
23 ;
24 for (ll = 1, llwidth = 1; ll > 0; ll <<= 1, ++llwidth)
25 ;
26 printf("CHAR_WIDTH: %d\n", cwidth);
27 printf("SCHAR_MIN: %d\n", SCHAR_MIN);
28 printf("SCHAR_MIN: %d\n", c);
29 printf("SCHAR_MAX: %d\n", SCHAR_MAX);
30 printf("SCHAR_MAX: %d\n", c^-1);
31 printf("UCHAR_MAX: %d\n", UCHAR_MAX);
32 printf("UCHAR_MAX: %u\n", (unsigned char)-1);
33 printf("CHAR_MIN: %d\n", CHAR_MIN);
34 printf("CHAR_MIN: %d\n", c);
35 printf("CHAR_MAX: %d\n", CHAR_MAX);
36 printf("CHAR_MAX: %d\n", c^-1);
37 printf("SHRT_WIDTH: %d\n", swidth);
38 printf("USHRT_MAX: %d\n", USHRT_MAX);
39 printf("USHRT_MAX: %d\n", (unsigned short)-1);
40 printf("SHRT_MIN: %d\n", SHRT_MIN);
41 printf("SHRT_MIN: %d\n", s);
42 printf("SHRT_MAX: %d\n", SHRT_MAX);
43 printf("SHRT_MAX: %d\n", s^-1);
44 printf("INT_WIDTH: %d\n", iwidth);
45 printf("UINT_MAX: %u\n", UINT_MAX);
46 printf("UINT_MAX: %u\n", (unsigned)-1);
47 printf("INT_MIN: %d\n", INT_MIN);
48 printf("INT_MIN: %d\n", i);
49 printf("INT_MAX: %d\n", INT_MAX);
50 printf("INT_MAX: %d\n", i^-1);
51 printf("LONG_WIDTH: %d\n", lwidth);
52 printf("LONG_MIN: %ld\n", LONG_MIN);
53 printf("LONG_MIN: %ld\n", l);
54 printf("LONG_MAX: %ld\n", LONG_MAX);
55 printf("LONG_MIN: %ld\n", l^-1);
56 printf("ULONG_MAX: %lu\n", ULONG_MAX);
57 printf("ULONG_MAX: %lu\n", (unsigned long)-1);
58 printf("LLONG_WIDTH: %d\n", llwidth);
59 printf("ULLONG_MAX: %llu\n", ULLONG_MAX);
60 printf("ULLONG_MAX: %llu\n", (unsigned long long)-1);
61 printf("LLONG_MIN: %lld\n", LLONG_MIN);
62 printf("LLONG_MIN: %lld\n", ll);
63 printf("LLONG_MAX: %lld\n", LLONG_MAX);
64 printf("LLONG_MIN: %lld\n", ll^-1);
65 }
66 /*
67 char_min
68 0
69 (~0)
70 00000000 0
71 00000001 1
72 11111110 -2
73 11111111 -1
74 10000000 -256
75 01111111 +255
78 min is
79 100000001
80 max is
81 011111111
82 (~0)+1
83 */