a = ~(1<<2);
cout << a << endl; // -5
(1<<2) = 0100 = 4 이다.
어떻게 -5가 나오는 걸까?
1. 일단 ~이기 때문에 0100 -> 1011이 된다.
2. 앞에 1은 부호비트이므로 다시 ~을 취한다. 0100 -> 1011 -> 0100
3. 그리고 +1을 해준다. 0100 + 0001 = 0101
4. 그 결과에 -를 붙힌다. 0101 = 5이므로
5. 최종적으로 -5가 된다.
- 정리하자면 ~n는 -n-1로 볼 수 있다.