如何计算 ANSI C 中整数数据类型的范围
How to calculate the range of integer data types in ANSI C
计算 ANSI C 中有符号、无符号、短整型和长整型数据类型范围的数学公式是什么?
无符号类型的范围从 0
到 2^(effective number of bits used by the type) - 1
签名类型至少有一个实现定义:
2的补码-(2^(effective number of bits used by the type - 1))
所有其他 -(2^(effective number of bits used by the type - 1) - 1)
有符号类型的最大值为 2^(effective number of bits used by the type - 1) - 1
^
是幂函数,不是异或。
/* 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 中获得的值作为参数发送到两个函数。在这两个函数中,它都是由变量 count 接收的。
- 在两个函数中将变量 pro 初始化为 1。
- 在函数signed_one()中使用while循环条件(count != 1),变量pro向左移动1位,变量count连续减1。
- 当循环终止时,将pro的补码赋值给变量min并将min加1。将变量pro减1并赋值给变量max。打印最小值和最大值作为输出。
- 在函数unsigned_one()中使用while循环条件(count !=0),将变量pro向左移动1位,并连续将变量count减1。
- 当循环终止时,将零赋值给变量min。递减变量 pro 并将其分配给变量 max。打印最小值和最大值作为输出。
计算 ANSI C 中有符号、无符号、短整型和长整型数据类型范围的数学公式是什么?
无符号类型的范围从 0
到 2^(effective number of bits used by the type) - 1
签名类型至少有一个实现定义:
2的补码-(2^(effective number of bits used by the type - 1))
所有其他 -(2^(effective number of bits used by the type - 1) - 1)
有符号类型的最大值为 2^(effective number of bits used by the type - 1) - 1
^
是幂函数,不是异或。
/* 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 中获得的值作为参数发送到两个函数。在这两个函数中,它都是由变量 count 接收的。
- 在两个函数中将变量 pro 初始化为 1。
- 在函数signed_one()中使用while循环条件(count != 1),变量pro向左移动1位,变量count连续减1。
- 当循环终止时,将pro的补码赋值给变量min并将min加1。将变量pro减1并赋值给变量max。打印最小值和最大值作为输出。
- 在函数unsigned_one()中使用while循环条件(count !=0),将变量pro向左移动1位,并连续将变量count减1。
- 当循环终止时,将零赋值给变量min。递减变量 pro 并将其分配给变量 max。打印最小值和最大值作为输出。