0

我是 C 的新手。

例如,说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);

}
4

6 回答 6

6

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

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

于 2012-06-22T08:47:04.293 回答
4

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

您看到的原因-1只是. 使用.%ldunsigned long%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更小。

于 2012-06-22T08:47:07.167 回答
3

检查这个。通常,当您对 C 或 C++ 有疑问时,请尝试首先在此站点上查找,这是一个很好的参考。

于 2012-06-22T08:49:21.950 回答
1

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

于 2012-06-22T08:48:56.290 回答
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 的最大值

于 2012-06-22T09:18:35.563 回答
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,整数:4294967295,长长:18446744073709551615

我在linux...

于 2012-06-22T09:18:50.323 回答