找出不含limits.h常量的整数类型的值范围

时间:2012-10-23 16:54:45

标签: c

如何在不使用signed short int的情况下检查limits.h的最大值?

我认为使用循环效率不高。是否有可能使它比循环更快?

3 个答案:

答案 0 :(得分:1)

您可以使用sizeof来获取字节大小。从那里它是一个简单的计算。

任何方式,为什么要避免limits.h

答案 1 :(得分:1)

您可以执行类似

的操作
int max_short = ((unsigned short)(-1))>>1;
printf("%d\n", max_short);

即无符号短路可以假设的最大值,为符号位移位一位。

答案 2 :(得分:1)

由于您说 check ,我假设您要确定给定值是否为signed short(或unsigned short)的最大值。您可以通过测试是否发生溢出来轻松检查此问题而不包括limits.h:当且仅当((X)(x + 1) < x)是其数据类型x的最大值时,X将评估为true (例如,可以是signed short)。由于整数提升规则,显式转换是必要的。

请注意,这在技术上是UB,因为标准规范没有定义有符号溢出。