2の補数の計算の2つの方法。
(1)
a=~a+1; /* 各ビットを反転して1を加える */
(2)
a=~(a-1); /* 1を引いて各ビットを反転させる */
証明 (3ビットで十分なので)
★方法(1)
値[10進] 各ビット反転 1を加算[10進]
000[ 0] 111 000[ 0]
001[ 1] 110 111[ー1]
010[ 2] 101 110[ー2]
011[ 3] 100 101[ー3]
100[ー4] 011 100[ー4]
101[ー3] 010 011[ 3]
110[ー2] 001 010[ 2]
111[ー1] 000 001[ 1]
★方法(2)
値[10進] 1を減算 各ビット反転[10進]
000[ 0] 111 000[ 0]
001[ 1] 000 111[ー1]
010[ 2] 001 110[ー2]
011[ 3] 010 101[ー3]
100[ー4] 011 100[ー4]
101[ー3] 100 011[ 3]
110[ー2] 101 010[ 2]
111[ー1] 110 001[ 1]