Компилятор может очень легко оптимизировать любую операцию в более быструю, поэтому на практике это, вероятно, мало чем отличается.
Я провел этот эксперимент с моим компилятором gcc (5.3 на ubuntu). Учитывая этот код:
#include <iostream>
int main()
{
for(int i=0; i<100; ++i) {
//if(i % 2 == 0)
if(!(i & 1))
std::cout << "i is odd" << std::endl;
else
std::cout << "i is even" << std::endl;
}
}
Какой бы из if
линий я закомментированными, сборка кода производится в точно так же, а именно:
mov eax, DWORD PTR [rbp-4] # D.35290, i
and eax, 1 # D.35290,
test eax, eax # D.35290
Другими словами, компилятор произвел и версию сравнение в обоих случаях. Это с оптимизацией по умолчанию.
'это быстрее, чем другой? ': Вы сделали какие-то тесты? – 101010
n & 1 должен быть быстрее, так как он проверяет, включен или выключен первый бит в строке bitstring, оператор «%» должен вычислить остальное. – PRDeving
Оставляя, как компилятор действует в этой ситуации, n% 2 потребует операции умножения и вычитания, которые являются дорогостоящими операциями. С другой стороны, & является просто простой и простой операцией. –