Все случаи не проверяла, но навскидку везде двойная проверка и можно восстановить, какой бит битый и его реальное значение.
Вот только совсем не легкий пример получился. Возможно, кто-то найдет решение попроще.
А, по-моему, xor'ами весьма изящно! Мне нравится!