Показать сообщение отдельно
  (#13 (permalink)) Старый
Maugly Maugly вне форума
Member
 
Сообщений: 78
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.09.2002
По умолчанию 10.01.2003, 21:43

Цитата:
Originally posted by Garik
[b]В этом вся соль! Если проверять на нечетность, то легко можно обойтись 1й операцией. А можно ли 1й операцией проверить на четнось? :wink:
Я имел ввиду практическое применение. То, что ниже конечно не очень отвечает задаче, но все-таки...
Смотрите что делает компилятор:

if (~i&1)
mov eax,dword ptr [i]
not eax
and eax,1
test eax,eax
je do_if_even+3Ah (48422Ah)
{
int do_something = 0;
do_something ++;
}

а теперь проверяем на нечетность, но заставляем прыгать в обратном случае

if (!(i&1))
mov eax,dword ptr [i]
and eax,1
test eax,eax
jne do_if_even+38h (484228h)
{
int do_something = 0;
do_something ++;
}

- на одну иснтрукцию меньше.
Ads