取决于您对“更容易”的定义...对于少量比较,效率并不是真正需要考虑的;您可以测试单个值,或者如果这些值是连续的,请执行 >= 和 <= 测试。如果您愿意,您可以随时使用宏或内联函数来整理内容,例如:
NS_INLINE BOOL inRange(lower, value, upper) { return (lower <= value) && (value <= upper); }
对于大量测试,或者只是为了美观,其他方法包括使用位掩码和数组。
如果您要测试少量(最多 32 或 64 个)连续值,那么您可以为要测试的集合定义位掩码并执行按位和运算。例如:
typedef enum { Sunday = 0, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } Day;
int WeekendSet = (1 << Sunday | 1 << Saturday);
if ( (1 << day) & WeekendSet ) // day is a weekend
对于较大但仍不太大的集合,您可以使用数组。这就是标准库isletter()、isdigit() 等函数有时是如何定义的。由于一个单字节字符最多有 255 个声明具有 256 个元素的静态布尔数组,效果很好。例如
static uint8 isADigit[] = { 0, 0, ..., 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, ... }; // 256 values, only 10 1's for position's '0' through '9'
if ( isADigit[myChar] ) // myChar is a digit