我是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);
}
答案 0 :(得分:6)
limits.h
定义了一些表示类型限制(或边界)的值。在您的情况下,INT_MIN
和INT_MAX
是一种可移植的方式,可以找出int
可以容纳的最小值和最大值。
http://en.wikibooks.org/wiki/C_Programming/C_Reference/limits.h
答案 1 :(得分:4)
标题limits.h
有一个常量UINT_MAX
,这是您想要的值。
您看到-1
的原因只是%ld
是unsigned long
的错误printf格式。使用%lu
。
C并不适合泛型编程,但最新的标准C11确实提供了根据参数类型(“类型 - 通用表达式”)执行不同操作的宏。
我从未使用它们,但我希望您可以编写宏NUMERIC_LIMITS_MAX
来隐藏映射int -> INT_MAX
,unsigned 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上...