exercise2-1

来源:互联网 发布:流量电话软件 编辑:程序博客网 时间:2024/06/05 00:43

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才是准确的。


原创粉丝点击