Я работаю над простой частью комбинаторики и обнаружил, что мне нужно восстановить позицию двух битов, учитывая позицию других двух битов в 4-битной последовательности.
например, (0,1) соответствует (2,3), (0,2) - (1,3) и т. Д., В общей сложности шесть комбинаций.
Мое решение состоит в тестировании битов с использованием четырех вложенных троичных операторов:
ab is a four bit string, with two bits set.
c = ((((ab & 1) ? (((ab & 2) ? ... ))) : 0)
abc = ab | c
recover the last bit in the same fashion from abc.
Я должен уточнить, без использования циклов, мой целевой язык - шаблоны метапрограммирования C ++. Я знаю, что указывал язык явно, но, по-моему, он все еще агностичен
можете ли вы придумать лучший или более умный путь?
спасибо