C语言中,有很多种数据类型,比如int, char, unsigned char等等,因为不同的机器,其对应的范围可能不同,当然最简单的办法就是查对应机器的资料,当然下面提供另外两种不同的方法。
number one:
其实,C语言数据范围已经在头文件<limits.h>中定义了,打开这个文件,我们看一下其中的冰山一角:
图中,我们可以看出该头文件已经定义好了数据类型的范围,当然,你也可以用程序打印出来(如果你不觉得麻烦的话):
#include <stdio.h>
#include <limits.h>
int main ()
{
printf("Size of Char %d\n", CHAR_BIT);
printf("Size of Char Max %d\n", CHAR_MAX);
printf("Size of Char Min %d\n", CHAR_MIN);
printf("Size of int min %d\n", INT_MIN);
printf("Size of int max %d\n", INT_MAX);
printf("Size of long min %ld\n", LONG_MIN);
printf("Size of long max %ld\n", LONG_MAX);
printf("Size of short min %d\n", SHRT_MIN);
printf("Size of short max %d\n", SHRT_MAX);
printf("Size of unsigned char %u\n", UCHAR_MAX);
printf("Size of unsigned long %lu\n", ULONG_MAX);
printf("Size of unsigned int %u\n", UINT_MAX);
printf("Size of unsigned short %u\n", USHRT_MAX);
return 0;
}
其中,CHAR_MAX是在<limits.h>中定义的,意思是字符型的最大值的意思,其他可举一反三。
number two:
如果自己用程序来计算出应该怎么办呢?
不说废话,举个例子(signed char):
求signed char的最大值,
#include <stdio.h>
int main ()
{
printf("Size of Char Max %d\n",(unsigned char)~0>>1);
return 0;
}
解析一下,
(unsigned char)~0>>1
1.首先执行~0,即把0取反也就是其每一位都是1;
2.用unsigned char进行强制类型转换,作用是使上述结果得位数扩充或缩小到char对应的位数(本人的电脑中的char为8bit);
3.使用右移符号>>,让第二步的结果得最高位被清除(从11111111变成01111111),此时的结果就是signed char型的最大值。
那么其最小值怎么求呢,其实最小值(-128)的绝对值等于最大值(127)+1(对于其他有符号类型也相同);
当然也可以用下面的语句打印出来:
#include <stdio.h>
int main ()
{
printf("Size of Char min %d\n",(-(unsigned char)~0)>>1);
return 0;
}
打印结果如下:
对于第二种方法,我们只举了一个例子,其他的差不多,就不累赘了。如果有什么别的方法,也请留言,大家一起交流。