练习 2-1 编写一个程序以确定分别由signed及unsigned 限定的char、short、int与long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现

方法一:打印标准头文件中的值(头文件limits.h定义了一些表示整型大小的常量)(如果在vc环境下查看的话,将光标放在相应的头文件处,右键选择打开相应的头文件即可,如下图所示)

练习 2-1 编写一个程序以确定分别由signed及unsigned 限定的char、short、int与long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现_第1张图片

练习 2-1 编写一个程序以确定分别由signed及unsigned 限定的char、short、int与long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现_第2张图片

从头文件中可以直接看到各种类型数据的最大值和最小值,可以在程序中直接将相应的值输出即可:
程序如下:

#include 
#include 

int main()
{
printf("Prints the corresponding value in the standard header file limits.h:\n");

printf("signed char min:%d\n",SCHAR_MIN);
printf("signed char max:%d\n",SCHAR_MAX);
printf("signed short min:%d\n",SHRT_MIN);
printf("signed short max:%d\n",SHRT_MAX);
printf("signed int min:%d\n",INT_MIN);
printf("signed int max:%d\n",INT_MAX);
printf("signed long min:%ld\n",LONG_MIN);
printf("signed long max:%ld\n",LONG_MAX);

printf("unsigned char max:%u\n",UCHAR_MAX);
printf("unsigned short max:%u\n",USHRT_MAX);
printf("unsigned int max:%u\n",UINT_MAX);
printf("unsigned long max:%lu\n",ULONG_MAX);

return 0;
}

执行结果如图所示:
练习 2-1 编写一个程序以确定分别由signed及unsigned 限定的char、short、int与long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现_第3张图片

方法二:采用直接计算的方法
我自己采用了很笨的办法,以int 为例:令i=0,然后分别做递增和递减的运算,直到达到极限为止,把过程中的最大值和最小值保存下来。在度娘上搜了一下这道题目的答案,发现别人的答案如此简单,自己真是好弱鸡啊T_T

下面这段程序的基本思想就是:对于unsigned类型,将每一位置为一即可得到最大值;对于signed类型,将除了符号位以外的每一位置为一即可得到最大值,最大值的相反数再减一即可得到最小值。

#include 

int main()
{
    printf("signed char min = %d\n", -(char)((unsigned char)~0>>1)-1);
    printf("signed char max = %d\n", (char)((unsigned char)~0>>1));
    printf("signed short min = %d\n", -(short)((unsigned short)~0>>1)-1);
    printf("signed short max = %d\n", (short)((unsigned short)~0>>1));
    printf("signed int min = %d\n", -(int)((unsigned int)~0>>1)-1);
    printf("signed int max = %d\n", (int)((unsigned int)~0>>1));
    printf("signed long min = %ld\n", -(long)((unsigned long)~0>>1)-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);

    return 0;
}

执行结果如下图所示:
练习 2-1 编写一个程序以确定分别由signed及unsigned 限定的char、short、int与long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现_第4张图片

你可能感兴趣的:(C语言学习习题)