0

signed short int不使用如何检查最大值limits.h

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

4

3 回答 3

1

您可以使用sizeof以字节为单位获取大小。从那里可以进行简单的计算。

无论如何,为什么要避免limits.h

于 2012-10-23T16:57:58.970 回答
1

你可以做类似的事情

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

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

于 2012-10-23T17:01:41.550 回答
1

既然您说检查,我假设您想确定给定值是否是 a signed short(或 an unsigned short)的最大值。您可以轻松地检查这一点,而无需limits.h通过测试是否发生溢出:((X)(x + 1) < x)当且仅当x其数据类型的最大值是Xsigned short例如)时才会评估为真。由于整数提升规则,显式转换是必要的。

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

于 2012-10-23T17:06:35.293 回答