А если на xor'ах мы теряем часть информации? Что если ввести ещё что-нибудь? And, например. And работает совсем иначе (а вот если есть and, то or уже не понадобится).
Или надо-таки для избежания потерь передать эти несчастные i1,i2,i3,i4, а потом замутить xor(i1,i2), xor(i1,i3), xor(i1,i4)
Как раз получается три xor'а. Хотя всё равно я вижу, что это не работает, можно придумать пример. Эх.