signed short int
不使用如何检查最大值limits.h
?
我认为使用循环效率不高。是否有可能比使用循环更快?
您可以使用sizeof
以字节为单位获取大小。从那里可以进行简单的计算。
无论如何,为什么要避免limits.h
?
你可以做类似的事情
int max_short = ((unsigned short)(-1))>>1;
printf("%d\n", max_short);
即无符号短路可以假设的最大值,符号位移位一位。
既然您说检查,我假设您想确定给定值是否是 a signed short
(或 an unsigned short
)的最大值。您可以轻松地检查这一点,而无需limits.h
通过测试是否发生溢出:((X)(x + 1) < x)
当且仅当x
其数据类型的最大值是X
(signed short
例如)时才会评估为真。由于整数提升规则,显式转换是必要的。
请注意,这在技术上是 UB,因为标准规范没有定义有符号溢出。