/* Hope it helps
* C Program to Print the Range~~ Google
*/
#include <stdio.h>
#define SIZE(x) sizeof(x)*8
void signed_one(int);
void unsigned_one(int);
void main()
{
printf("\nrange of int");
signed_one(SIZE(int));
printf("\nrange of unsigned int");
unsigned_one(SIZE(unsigned int));
printf("\nrange of char");
signed_one(SIZE(char));
printf("\nrange of unsigned char");
unsigned_one(SIZE(unsigned char));
printf("\nrange of short");
signed_one(SIZE(short));
printf("\nrange of unsigned short");
unsigned_one(SIZE(unsigned short));
}
/* RETURNS THE RANGE SIGNED*/
void signed_one(int count)
{
int min, max, pro;
pro = 1;
while (count != 1)
{
pro = pro << 1;
count--;
}
min = ~pro;
min = min + 1;
max = pro - 1;
printf("\n%d to %d", min, max);
}
/* RETURNS THE RANGE UNSIGNED */
void unsigned_one(int count)
{
unsigned int min, max, pro = 1;
while (count != 0)
{
pro = pro << 1;
count--;
}
min = 0;
max = pro - 1;
printf("\n%u to %u", min, max);
}
程序说明
-
将字节数乘以8,将字节数转换为位。
-
使用signed_one()和unsigned_one)两个函数分别计算有符号和无符号数据类型的范围。
-
步骤1中获得的值作为参数发送给两个函数。在这两个函数中,它都由变量计数接收。
-
在两个函数中将变量pro初始化为1。
-
在函数signed_one()中,使用while循环,条件为(count!=1),将变量pro向左移动1个位置,然后将变量count连续递减1。
-
当循环终止时,将pro的补码分配给变量min,并将min递增1。减小变量pro并将其分配给变量max。将min和max打印为输出。
-
在函数unsigned_one()中,使用while循环,条件为(count!=0),将变量pro向左移动1个位置,然后将变量count连续递减1。
-
当循环终止时,将零分配给变量min。减小变量pro并将其分配给变量max。将最小值和最大值打印为输出。