С чего вы взяли, что сравнение происходит быстрее?Если код, который вы пишете, был выполнен в компиляторе C, оператор IF разделился бы как минимум на две инструкции - инструкцию сравнения / ветвления и инструкцию "set" для одного бита одного слова.
"set" будет компилироваться в одну инструкцию.Ваша «оптимизация» может замедлить работу вашей программы и сделать вашу программу менее читаемой.Просто установите переменную и не пытайтесь продумать мелочи.
Процессоры не похожи на базы данных.Вы не платите большие штрафы за изменения данных. Вы платите большие штрафы за поездки в основную память и за ветвление (если операторы).Ветвления стоят производительности, потому что конвейерная обработка ЦП фактически начинают выполнять инструкции после ветвления, прежде чем инструкции ветвления даже примут свое решение!(Я знаю, это утверждение несколько ошеломляет).Но это означает, что ЦП должен тратить ресурсы " угадывая ", каким будет результат вашего утверждения IF.Если он угадает неправильно, он должен «выбросить» результаты всех предполагаемых им инструкций, которые будут выполнены после ветвления, и повторить попытку.Это плохо.Вот почему филиалы стоят дорого.
Мораль этой конкретной истории не в том, что вы никогда не должны оптимизировать, а в том, что вы не должны никогда не оптимизировать без полного понимания последствий вашей оптимизации .В этом случае, если бы вы перешли к варианту 1, вы могли бы получить более медленное приложение, которое менее читабельно для загрузки.
На самом деле, если вы действительно заинтересованы в подобных вещах, вам следует определенно взять копию Code Complete .Он полон дискуссий о подобных вещах и великолепно написан.