/*编写一程序以确定分别由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