2-1

来源:互联网 发布:ubuntu 16.04 uefi 编辑:程序博客网 时间:2024/06/11 09:58

/*编写一程序以确定分别由signed 及unsigned 限定的char,short,int ,long类型的取值范围
采用打印标准头文件中的相应值以及直接计算两种方法实现*/


#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <float.h>
#define S_PRINT(ch,c_min,c_max,s_min,s_max,i_min,i_max,l_min,l_max)  /
 printf(ch##":/n/tchar:%d~~~%d/n/tshort:%d~~~%d/n/tint:%d~~~%d/n/tlong:%d~~~%d", /
 c_min,c_max,s_min,s_max,i_min,i_max,l_min,l_max)
#define US_PRINT(ch,c_min,c_max,s_min,s_max,i_min,i_max,l_min,l_max)  /
 printf(ch##":/n/tchar:%u~~~%u/n/tshort:%u~~~%u/n/tint:%u~~~%u/n/tlong:%u~~~%u", /
 c_min,c_max,s_min,s_max,i_min,i_max,l_min,l_max)
#define MIN(c)  (~((c|1)<<(sizeof(c)*8-1))+1)

int main(void)
{
 signed char c=0;signed short s=0;signed int i=0;signed long l=0;
 unsigned char uc=0;  unsigned short us=0; unsigned int ui=0; unsigned ul=0;
 printf("采用打印标准头文件相应值的方法:/n");
 S_PRINT("SIGNED",CHAR_MIN,CHAR_MAX,SHRT_MIN,SHRT_MAX,INT_MIN,INT_MAX,LONG_MIN,LONG_MAX);
 putchar('/n');
 US_PRINT("UNSIGNED",     0,UCHAR_MAX,      0,USHRT_MAX,     0,UINT_MAX,      0,ULONG_MAX);
 printf("/n采用直接计算的方法:/n");
 S_PRINT("SIGNED", MIN(c),~MIN(c),MIN(s),~MIN(s),MIN(i),~MIN(i),MIN(l),~MIN(l));
 putchar('/n');
 US_PRINT("UNSIGNED",0,~uc,0,~us,0,~ui,0,~ul);
 putchar('/n');

 return 0;
}

==============================================================

采用打印标准头文件相应值的方法:
SIGNED:
        char:-128~~~127
        short:-32768~~~32767
        int:-2147483648~~~2147483647
        long:-2147483648~~~2147483647
UNSIGNED:
        char:0~~~255
        short:0~~~65535
        int:0~~~4294967295
        long:0~~~4294967295
采用直接计算的方法:
SIGNED:
        char:-128~~~127
        short:-32768~~~32767
        int:-2147483648~~~2147483647
        long:-2147483648~~~2147483647
UNSIGNED:
        char:0~~~4294967295
        short:0~~~4294967295
        int:0~~~4294967295
        long:0~~~4294967295

原创粉丝点击