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

xiaoxiao2021-02-28  118

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

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

#include <stdio.h> #include <limits.h> 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; }

执行结果如图所示:

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

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

#include <stdio.h> 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; }

执行结果如下图所示:

转载请注明原文地址: https://www.6miu.com/read-31722.html

最新回复(0)