>>709
イメージとしては、二つ目の変数の変化をEXORで抽出しながら変更用マスクを作成
そのマスクで一つ目の変数と再度EXOR演算、これで二つ目の変更ビット個所だけ一つ目のビットが反転する

ざっくりとした流れはこんな感じ
一つ目の値(状態)a、二つ目の値(入力)b、入力比較用変数c、変更ビットマスクd
c = input(b);
while(1) {
d = c ^ input(b);
c = b;
a ^= d;
}