如何在c中获取给定数据类型的最大值?

时间:2012-06-22 08:43:48

标签: c

我是C的新手。

for.eg说int的最大值为32767(但这个值对于其他系统可能不同),我的问题是如何使用C程序或函数为任何数据类型获取这些值。

int我正在尝试这种方法,但它会返回-1

#include<stdio.h>
void main(void){

unsigned int x=1;
unsigned long count=0;

for(x=1;;x++){

    if(x==0){break;}
    count++; 

    }

printf("%ld",count);

}

6 个答案:

答案 0 :(得分:6)

limits.h定义了一些表示类型限制(或边界)的值。在您的情况下,INT_MININT_MAX是一种可移植的方式,可以找出int可以容纳的最小值和最大值。

http://en.wikibooks.org/wiki/C_Programming/C_Reference/limits.h

答案 1 :(得分:4)

标题limits.h有一个常量UINT_MAX,这是您想要的值。

您看到-1的原因只是%ldunsigned long的错误printf格式。使用%lu

C并不适合泛型编程,但最新的标准C11确实提供了根据参数类型(“类型 - 通用表达式”)执行不同操作的宏。

我从未使用它们,但我希望您可以编写宏NUMERIC_LIMITS_MAX来隐藏映射int -> INT_MAXunsigned char -> UCHAR_MAX等。结果代码不会(还)非常便携,因为C11的部分实现并不多,更不用说完整了。

也就是说,对于无符号类型,您始终可以将最大值设为(unsigned long)(-1),依此类推。签名类型有点尴尬,因为标准使得实现可以自由地执行许多奇怪的事情。在实践中,INT_MAX等于(((unsigned int)(-1)) / 2) + 1。理论上,int允许的填充位数比unsigned int多,在这种情况下INT_MAX更小。

答案 2 :(得分:3)

检查this。一般来说,如果您对C或C ++有疑问,请先在本网站查询,这是一个很好的参考。

答案 3 :(得分:1)

您需要的是#include <limits.h>

答案 4 :(得分:0)

在运行时获取最大int的解决方案:

int main ( )
{
    unsigned int y = (unsigned int)(~0)>>1;
    printf ("max of int is %u\r\n",y);
    return 1;
}

<强>的解释:

y = ~0设置y与二进制为0相反。如果我们的系统是32位,那么0将用二进制表示(0000 ... 0)(32),其相反的二进制是(1111) ... 1)(32)。

y>>1将y移位1位,因此y的值将为(0111..1)(31),这是int的最大值

答案 5 :(得分:0)

只需打印-1

#include "stdint.h"

printf("Byte :%u, Short :%hu,  Int :%u, Long Long :%llu\n",
             (uint8_t)-1, (uint16_t)-1, (uint32_t)-1, (uint64_t)-1);

输出是:

  

字节:255,短:65535,Int:4294967295,Long Long   :18446744073709551615

我在linux上...