#include <iostream>
int main() {
int number = 87;
// bitwise masks:
// negative → bit 0 (value 1)
// zero → bit 1 (value 2)
// positive → bit 2 (value 4)
unsigned mask =
(number < 0) // becomes 1 if true → negative mask
| ((number == 0) << 1) // becomes 2 if true → zero mask
| ((number > 0) << 2); // becomes 4 if true → positive mask
// lookup table indexed by mask value
const char* result[8] = {
"undefined", // 0 (should never occur)
"negative", // 1
"zero", // 2
"undefined", // 3
"positive", // 4
"undefined", // 5
"undefined", // 6
"undefined" // 7
};
std::cout << result[mask] << std::endl;
/*
Checks:
number = -3
(number < 0) = 1
(number == 0) = 0
(number > 0) = 0
mask = 1 | 0 | 0 = 1
result = negative
number = 0
(number < 0) = 0
(number == 0) = 1 << 1 = 2
(number > 0) = 0
mask = 0 | 2 | 0 = 2
result = zero
number = 89
(number < 0) = 0
(number == 0) = 0
(number > 0) = 1 << 2 = 4
mask = 0 | 0 | 4 = 4
result = positive
*/
}
/*
run:
positive
*/