1、确定各种类型变量的取值范围。
问题及代码:
/*determine range of types
确定各种类型变量的取值范围*/
#include<stdio.h>
#include<limits.h>
int main()
{
/*signed types有符号类型*/
printf("signed char min=%d\n",SCHAR_MIN);
printf("signed char max=%d\n",SCHAR_MAX);
printf("signed int min=%d\n",INT_MIN);
printf("signed int max=%d\n",INT_MAX);
printf("signed long min=%ld\n",LONG_MIN);
printf("signed long max=%ld\n",LONG_MAX);
printf("signed short min=%d\n",SHRT_MIN);
printf("signed short max=%d\n",SHTR_MAX);
/*unsigned types无符号类型*/
printf("unsigned char max=%d",UCHAR_MAX);
printf("unsigned int max=%d",UINT_MAX);
printf("unsigned long max=%ld",ULONG_MAX);
printf("unsigned short max=%d",USHRT_MAX);
/*ANSI C标准规定:各种类型的取值范围必须在头文件<limits.h>中定义。*/
2、利用按位运算符计算
/*determine range of types*/
#include<stdio.h>
int main()
{
/*signed types*/
printf("signed char min=%d",-(char)(unsigned char ~0 >> 1));
printf("signed char max=%d",(char)(unsigned char ~0 >> 1);
printf("signed int min=%d",-(int)(unsigned int ~0 >> 1));
printf("signed int max=%d",(int)(unsigned int ~0 >> 1);
printf("signed short min=%",(-short)(unsigned short ~0 >> 1);
printf("signed short max=%d",(short)(unsigned short ~0 >> 1));
printf("signed long min=%",(-long)(unsigned long ~0 >> 1);
printf("signed long max=%d",(long)(unsigned long ~0 >> 1));
/*unsigned types*/
printf("unsigned char max=%u",(unsigned char ~0 >> 1));
printf("unsigned int max=%u",(unsigned int ~0 >> 1));
printf("unsigned long max=%lu",(unsigned int ~0 >> 1));
printf("unsigned short max=%u",(unsigned int ~0 >> 1));
/*第一句理解:先把~0的各个二进制位全换为1,然后将结果换为(unsigned char)类型
,再将其右移一位以清除符号位,最后再转为(char)类型*/