Write a program to determine the ranges of char,short,int,and long variables,both singed and unsinged.by printing appropiate values from standard headers and by direct computation.Harder if you compute them:determine the ranges of the various floating-point types.
#include<stdio.h>
#include<limits.h>
main()
{
printf("singed char min:%d\n", SCHAR_MIN);
printf("singed char max:%d\n", SCHAR_MAX);
printf("singed short min:%d\n",SHRT_MIN);
printf("singed short max:%d\n",SHRT_MAX);
printf("singed int min:%d\n",INT_MIN);
printf("singed int max:%d\n",INT_MAX);
printf("singed long min:%ld\n",LONG_MIN);
printf("singed long max:%ld\n",LONG_MAX);
printf("unsinged char max:%u\n",UCHAR_MAX);
printf("unsinged short max:%u\n",USHRT_MAX);
printf("unsinged int max:%u\n",UINT_MAX);
printf("unsinged long max:%lu\n",ULONG_MAX);
}
"check.c" 19 lines, 571 characters
……………………………………………………………………………………………………………………singed char min:-128
singed char max:127
singed short min:-32768
singed short max:32767
singed int min:-2147483648
singed int max:2147483647
singed long min:-2147483648
singed long max:2147483647
unsinged char max:255
unsinged short max:65535
unsinged int max:4294967295
unsinged long max:4294967295
……………………………………………………………………………………………………………………
#include<stdio.h>
#include<limits.h>
main()
{
printf("singed char min:%d\n",-(char)((unsigned char)~0 >>1));
printf("signed char max:%d\n",(char)((unsigned char)~0>>1));
printf("signed short min:%d\n",-(short)((unsigned short)~0 >>1));
printf("signed short max:%d\n",(short)((unsigned short)~0 >> 1));
printf("signed int min:%d\n",-(int)((unsigned int)~0 >> 1));
printf("signed int max:%d\n",(int)((unsigned int)~0 >> 1));
printf("signed long min:%ld\n",-(long)((unsigned long)~0 >>1));
printf("signed long max:%ld\n",(long)((unsigned long)~0 >> 1));
printf("unsigned char max:%u\n",(unsigned char)~0);
printf("unsigned short max:%u\n",(unsigned short)~0);
printf("unsigned int max:%u\n",(unsigned int)~0);
printf("unsigned long max:%lu\n",(unsigned long)~0);
}
~
~
~
~
"check3.c" 19 lines, 776 characters
singed char min:-127
signed char max:127
signed short min:-32767
signed short max:32767
signed int min:-2147483647
signed int max:2147483647
signed long min:-2147483647
signed long max:2147483647
unsigned char max:255
unsigned short max:65535
unsigned int max:4294967295
unsigned long max:4294967295
先把数字0的各位二进制转换为1;
然后将结果转换为unsigned 类型;
再把这个unsigned XX类型的值右移一位,清楚符号位;
最后再转化为相应的XX类型。
这一系列的结果最终得到signed类型的最大值。
由上述两个程序的结果对比可知:第二个程序中signed类型的负的最小值应该还要-1才是准确的。