原标题:如何在没有任何库函数的情况下打印基本数据类型的范围并在C中保持常量?
如何编写C代码来打印基本数据类型的范围,如int,char,short int,unsigned int,unsigned char等? 假设有符号数以2的补码形式存储。
我们强烈建议您尽量减少浏览器,并先自行尝试。
以下是无符号数据类型要遵循的步骤。
1)使用sizeof运算符查找给定数据类型的字节数。
2)通过将sizeof的结果乘以8来查找位数
.3)无论数据类型如何,无符号类型的最小值始终为0。
4)无符号类型的最大值是(1 << n) - 1,其中n是数据类型所需的位数。例如,对于通常需要8位的char,最大值为255.以下是签名数据类型要遵循的步骤。1)使用sizeof运算符查找给定数据类型的字节数。2)通过将sizeof的结果乘以8来查找位数.3)有符号类型的最小值是 - (1 <
// C program to print range of basic data types
#include
// Prints min and max value for a signed type
void printUnsignedRange(size_t bytes)
{
int bits = 8*bytes;
// Note that the value of 'to' is "(1 << bits) - 1"
// Writing it in following way doesn't cause overflow
unsigned int to = ((1 << (bits-1)) - 1) + (1 << (bits-1)) ;
printf(" range is from %u to %u \n", 0, to);
}
// Prints min and max value for an unsigned type
void printSignedRange(size_t bytes)
{
int bits = 8*bytes;
int from = -(1 << (bits-1));
int to = (1 << (bits-1)) - 1;
printf(" range is from %d to %d\n", from, to);
}
int main()
{
printf("signed char: ");
printSignedRange(sizeof(char));
printf("unsigned char: ");
printUnsignedRange(sizeof(unsigned char));
printf("signed int: ");
printSignedRange(sizeof(int));
printf("unsigned int: ");
printUnsignedRange(sizeof(unsigned int));
printf("signed short int: ");
printSignedRange(sizeof(short int));
printf("unsigned short int: ");
printUnsignedRange(sizeof(unsigned short int));
return 0;
}
输出:
signed char:范围是-128到127
unsigned char:range从0到255
signed int:范围是从-2147483648到2147483647
unsigned int:range从0到4294967295
signed short int:范围从-32768到32767
unsigned short int:range从0到65535
请注意,上述函数不能用于float。此外,上述程序可能不适用于大于int的数据类型,如'long long int'。我们可以通过将'to'和'from'的数据类型更改为long long int来使其适用于更大的类型。返回搜狐,查看更多
责任编辑: