Python에서 비트 연산자를 공부하다가 비트 반전 연산자를 알게되었다.

해당 연산자 중에서 ~ 연산자가 비트 반전 연산자이다.
int a;
int x = 10;
a = ~x;
해당 식을 실행시키면 a에 어떤 값이 들어갈까?
바로 -11이라는 요상한 값이 들어간다.
왜 -11이 들어가는 것일까?
나는 처음에 해당 비트 연산을 시키고 다른 연산을 아무리 해봐도 -11이 나오지 않아서 너무 헷갈렸다.
추후에 이것저것 찾아보니까 원리를 이해할 수 있다.
ChatGPT한테 물어봤는데도 계속 이상한 소리를 했다...
한번 자세히 내부적으로 어떻게 동작하는 자세히 알아보자.
C 언어에서 int 자료형을 8비트로 가정하고 생각해보자.
그러면 10은 "0000 1010"이 된다.
그리고 해당 값을 비트 반전 연산자를 적용하면?
"0000 1010"은 "1111 0101"이 된다.
그런데 중요한 건 프로그래밍 언어에서 맨 처음 비트는 부호를 나타내는 비트이다.
즉, 부호를 나타내는 비트까지 변경이 되어버렸다!
그러면 이제 "1111 0101"를 정수로 나타내려고 하는데,
컴퓨터가 어떻게 계산하는지 생각해보자.
컴퓨터는 음수를 십진수로 표현하기 위해서 2의 보수를 취한다.
2의 보수 => 1의 보수(비트 반전) + 1
즉, "1111 0101"은 "0000 1011"이 된다.
그러면 "11"이 되어야 하는게 아닌가? 라는 의문이 들 수 있다.
하지만, 해당 수는 첫 비트가 1이였기 때문에 음수로 표현해야 한다.
따라서 10의 비트 연산 결과를 정수로 표현하면 -11이 된다!