@askogorev

Что быстрее: n%2 или n&1 (c++)?

Ради интереса: что будет работать быстрее? Конъюнкция n&1 или остаток от деления n%2?

Для примера:
int n = 72341;
if (n%2)
{
  // ...
}

PS: int N;
  • Вопрос задан
  • 6122 просмотра
Пригласить эксперта
Ответы на вопрос 4
hell0w0rd
@hell0w0rd
Просто разработчик
одинаково. Пишите так, чтобы было понятно, компиляторы оптимизируют лучше вас
Ответ написан
Комментировать
@Lol4t0
Вы еще попробуйте заставить компиллятор использовать деление вместо конъюнкции. Clang еще можно, а вот gcc отказывается даже с полностью отключенной оптимизацией.

int main(int n, char**)
{
  if (n%2)
  {
    return 1;
  };
}


main:
	push	rbp
	mov	rbp, rsp
	mov	DWORD PTR [rbp-4], edi
	mov	QWORD PTR [rbp-16], rsi
	mov	eax, DWORD PTR [rbp-4]
	and	eax, 1
	test	eax, eax
	je	.L2
	mov	eax, 1
	jmp	.L3
.L2:
	mov	eax, 0
.L3:
	pop	rbp
	ret
Ответ написан
@Masterme
на низком уровне - коньюкция
Ответ написан
TheRipper
@TheRipper
Ещё есть вариант
n<<(sizeof(n)*CHAR_BIT-1)
%)
хотя, подозреваю, что у меня тут не совсем правильный способ считать количество бит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы