В то время как другие предлагали ответы, я хотел бы предложить обоснование для лучшего.
Используйте целочисленные значения -1/0/1 (или действительно, любые отрицательные / ноль / положительные).
В этой схеме чрезвычайно эффективная проверка любого подмножества возможных значений:
(x<0) /* {-1} */
(!x) /* {0} */
(x>0) /* {1} */
(x<=0) /* {-1,0} */
(x) /* {-1,1} */
(x>=0) /* {0,1} */
В x86 все они скомпилируются в один код операции test
, за которым следует код операции условного перехода с соответствующими условиями.
Если вы хотите скрыть реализацию, вы можете использовать макросы предикатов для тестирования каждого из 6 подмножеств.