如何在不使用signed short int
的情况下检查limits.h
的最大值?
我认为使用循环效率不高。是否有可能使它比循环更快?
答案 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,因为标准规范没有定义有符号溢出。