- 1
- 2
- 3
- 4
- 5
- 6
- 7
/********************************************************************
ОПЕРАЦИЯ ЛОГИЧЕСКОЕ ИСКЛЮЧАЮЩЕЕ ИЛИ
********************************************************************/
static inline bool XOR(bool lhs, bool rhs)
{
return (lhs && !rhs) || ( !lhs && rhs);
}
true == 1
false == 0
Есть, конечно иные варианты логики, но это уже изврат!
P.S. на всех известных мне компиляторах такой xor и побитовый отличаются только тем, что говнокодовый медленнее!
Кто он ? Стандартного нет и баста. Проще чем сказал TarasB придумать сложно.
>такой xor и побитовый отличаются только тем, что говнокодовый медленнее!
XOR из ГК логический, а не побитовый. Вы вообще понимаете разницу между логическими и побитовыми операциями ?
Проверка на неравенство катит тоже только после приведения к bool.
true == 1
false == 0
разницы нету! разве что ^ выполняется процессором безумно быстро
Безумно...
XOR AX, AX ; вот эта битовая операция
; посему и пишут всегда XOR AX, AX вместо MOV'а
У меня получились одинаковые результаты для != и ^.
Что ещё интереснее логические операции И, ИЛИ оказались быстрее битовых.
Безусловно.
С оптимизацией != и ^ снова одинаковы.
Логические И, ИЛИ и вовсе в ~30 раз быстрее побитовых.
Собственно сами бы давно проверили чтоб не спрашивать :)
И это весьма логично и ожидаемо (из опыта программирования на asm x86)
Изначально тестировал на Eclipse с MinGW.
Их надо оставить, просто надо использовать volatile и проверять, objdump-ом, что скомпилен правильный код.
Вы ж не будете итоговый проект компилировать без оптимизаций.
Вообще, очень рекомендую бросать куски дизассемблированного кода, чтобы мы поняли о чём в реальности идёт речь
(lhs || rhs) && !(lhs && rhs)