Gidhub BE Developer

C언어 ~ 비트 연산자

2018-09-13
goodGid

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로 볼 수 있다.

관련 질문


Index