【C语言程序设计】编程确定不同数据类型的取值范围
2012-09-23 15:23
471 查看
原文链接:http://www.cnblogs.com/wangzhiyu811/archive/2011/07/12/2104377.html
感谢原作者的辛苦劳作!
练习2-1:
编写一个程序以确定分别由signed及unsigned限定的char、short、int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现:
采用打印标准头文件中的相应值:
1 #include <stdio.h>
2 #include <limits.h>
3 //determine ranges of types
4 int main()
5 {
6 printf("采用打印标准头文件limits.h中的相应值:\n");
7 //signed types
8 printf("signed
char min = %d\n", SCHAR_MIN);
9 printf("signed char max = %d\n",
SCHAR_MAX);
10 printf("signed short min =
%d\n", SHRT_MIN);
11 printf("signed short max =
%d\n", SHRT_MAX);
12 printf("signed int min = %d\n",
INT_MIN);
13 printf("signed int max = %d\n",
INT_MAX);
14 printf("signed long min =
%ld\n", LONG_MIN);
15 printf("signed long max =
%ld\n", LONG_MAX);
16 //unsigned types
17 printf("unsigned
char max = %u\n", UCHAR_MAX);
18 printf("unsigned short max
= %u\n", USHRT_MAX);
19 printf("unsigned int max =
%u\n", UINT_MAX);
20 printf("unsigned long max
= %lu\n", ULONG_MAX);
21 system("pause");
22 return 0;
23 }
执行结果:
这种实现方式没有什么需要讨论的,只需要知道相应的头文件和变量名称。
直接计算:
1 #include <stdio.h>
2 //determine ranges of types
3 int main()
4 {
5 printf("采用直接计算的方式:\n");
6 //signed types
7 printf("signed
char min = %d\n", -(char)((unsigned char)~0>>1)-1);
8 printf("signed char max = %d\n",
(char)((unsigned char)~0>>1));
9 printf("signed short min =
%d\n", -(short)((unsigned short)~0>>1)-1);
10 printf("signed short max =
%d\n", (short)((unsigned short)~0>>1));
11 printf("signed int min = %d\n", -(int)((unsigned int)~0>>1)-1);
12 printf("signed int max = %d\n",
(int)((unsigned int)~0>>1));
13 printf("signed long min =
%ld\n", -(long)((unsigned long)~0>>1)-1);
14 printf("signed long max =
%ld\n", (long)((unsigned long)~0>>1));
15 //unsigned types
16 printf("unsigned
char max = %u\n", (unsigned char)~0);
17 printf("unsigned short max
= %u\n", (unsigned short)~0);
18 printf("unsigned int max =
%u\n", (unsigned int)~0);
19 printf("unsigned long max
= %lu\n", (unsigned long)~0);
20 system("pause");
21 return 0;
22 }
执行结果:
小结:
利用按位运算符进行计算。表达式:(char)((unsigned char)~0>>1)
先把数字0的各个二进制位全部转换为1:取反,~0
然后,将结果值转换为unsigned char类型:(unsigned char)~0
再把这个unsigned char类型值右移一位以清除符号位:(unsigned char)~0 >> 1
最后,把它转换为char类型:(char)((unsigned char)~0>>1)
这一系列操作的最终结果就得到了signed类型字符的最大值。
而其signed类型字符的最小值加负号后还需减去1才是最小值。
感谢原作者的辛苦劳作!
练习2-1:
编写一个程序以确定分别由signed及unsigned限定的char、short、int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现:
采用打印标准头文件中的相应值:
1 #include <stdio.h>
2 #include <limits.h>
3 //determine ranges of types
4 int main()
5 {
6 printf("采用打印标准头文件limits.h中的相应值:\n");
7 //signed types
8 printf("signed
char min = %d\n", SCHAR_MIN);
9 printf("signed char max = %d\n",
SCHAR_MAX);
10 printf("signed short min =
%d\n", SHRT_MIN);
11 printf("signed short max =
%d\n", SHRT_MAX);
12 printf("signed int min = %d\n",
INT_MIN);
13 printf("signed int max = %d\n",
INT_MAX);
14 printf("signed long min =
%ld\n", LONG_MIN);
15 printf("signed long max =
%ld\n", LONG_MAX);
16 //unsigned types
17 printf("unsigned
char max = %u\n", UCHAR_MAX);
18 printf("unsigned short max
= %u\n", USHRT_MAX);
19 printf("unsigned int max =
%u\n", UINT_MAX);
20 printf("unsigned long max
= %lu\n", ULONG_MAX);
21 system("pause");
22 return 0;
23 }
执行结果:
这种实现方式没有什么需要讨论的,只需要知道相应的头文件和变量名称。
直接计算:
1 #include <stdio.h>
2 //determine ranges of types
3 int main()
4 {
5 printf("采用直接计算的方式:\n");
6 //signed types
7 printf("signed
char min = %d\n", -(char)((unsigned char)~0>>1)-1);
8 printf("signed char max = %d\n",
(char)((unsigned char)~0>>1));
9 printf("signed short min =
%d\n", -(short)((unsigned short)~0>>1)-1);
10 printf("signed short max =
%d\n", (short)((unsigned short)~0>>1));
11 printf("signed int min = %d\n", -(int)((unsigned int)~0>>1)-1);
12 printf("signed int max = %d\n",
(int)((unsigned int)~0>>1));
13 printf("signed long min =
%ld\n", -(long)((unsigned long)~0>>1)-1);
14 printf("signed long max =
%ld\n", (long)((unsigned long)~0>>1));
15 //unsigned types
16 printf("unsigned
char max = %u\n", (unsigned char)~0);
17 printf("unsigned short max
= %u\n", (unsigned short)~0);
18 printf("unsigned int max =
%u\n", (unsigned int)~0);
19 printf("unsigned long max
= %lu\n", (unsigned long)~0);
20 system("pause");
21 return 0;
22 }
执行结果:
小结:
利用按位运算符进行计算。表达式:(char)((unsigned char)~0>>1)
先把数字0的各个二进制位全部转换为1:取反,~0
然后,将结果值转换为unsigned char类型:(unsigned char)~0
再把这个unsigned char类型值右移一位以清除符号位:(unsigned char)~0 >> 1
最后,把它转换为char类型:(char)((unsigned char)~0>>1)
这一系列操作的最终结果就得到了signed类型字符的最大值。
而其signed类型字符的最小值加负号后还需减去1才是最小值。
相关文章推荐
- C语言数据类型取值范围
- 编译器定义的C/C++语言各种基本数据类型的取值范围用程序输出
- 编译器定义的C/C++语言各种基本数据类型的取值范围
- 不同数据类型的取值范围
- 编译器定义的C/C++语言各种基本数据类型的取值范围
- C++不同数据类型的取值范围(Data Type Ranges )
- C语言数据类型取值范围解析
- 编译器定义的C/C++语言各种基本数据类型的取值范围
- C++下基本数据类型所占位数和取值范围
- [程序设计语言]-[核心概念]-04:数据类型
- C语言数据类型取值范围解析
- C++各数据类型取值范围
- C语言各种数据类型的取值范围
- c++内置数据类型的取值范围和大小总结
- 练习2-1 编写一个程序一确定分别由signed及unsigned限定的char,short,int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。通过直接计算来确定浮点类型的取值范围是一项难度很大的任务。
- 编写一个程序以确定分别由signed及unsigned限定的char、short、int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现
- 备忘:C++各数据类型取值范围(备忘)--32位操作系统
- C语言数据类型的表示范围
- C++中基本数据类型字节数及取值范围
- C++各数据类型取值范围(备忘)--32位操作系统