Оба фрагмента кода выполняют одно и то же. Основное отличие состоит в том, что первое читаемо и легко для понимания, а второе запутано, и требуется некоторое размышление, чтобы понять, что оно действительно эквивалентно первому, что довольно запутанно, как подтверждают многие комментарии.
С точки зрения оптимизации в этих случаях тщетно думать, что компилятор в любом случае, вероятно, сгенерирует эквивалентный код для обоих.
Вывод понятен:
- Всегда пишите простой и читаемый код.
- Неэффективный, но правильный код всегда превосходит неработающий оптимизированный код.
- Забудьте о микрооптимизациях, компиляторы в этом гораздо лучше, чем люди.
- Производительность - это гораздо больше вопрос алгоритмической сложности, чем тонкая настройка кода.