[python] 비트 NOT 연산자 ~x
1. 정의
각 비트를 반전시키는 역할을 합니다. 즉, 0을 1로, 1을 0으로 바꾸는 연산
2. 계산방법
예) ~5
1) 2진수로 변환 :5를 2진수로 변환하면 00000101
2) 비트반전 : 00000101 비트반전 → 11111010
3) 10진수로 변환: 11111010 비트반전+1 → 00000101 +1 = 00000111 →6이고, 1로 시작한 음수이므로 -6
▶ 어차피 다시 반전해서 +1을하고, 마지막에 -부호를 달아주면 되기 때문에
결과적으로는 (십진수+1) 후 부호반전을 해주면 된다.
3. 음수의 2진수 변환(2의 보수: two's complement )
1) 양수의 이진수로 변환: 5를 8비트 이진수로 표현하면: 00000101
2) 00000101의 0과 1 반전: 11111010
3) 1을 더함: 11111010 + 1 = 11111011
4. 부호 비트와 2의 보수 표현
- 2의 보수 표현에서는 가장 왼쪽 비트(MSB, Most Significant Bit)가 부호를 나타낸다.
1) MSB가 0이면 양수
2) MSB가 1이면 음수
- 8비트 이진수의 경우 맨 왼쪽의 비트는 부호, 나머지 7비트가 크기를 나타내므로
1) 양수는 00000000 (0)에서 01111111 (127)까지
2) 음수는 10000000 (-128)에서 11111111 (-1)까지
5. 2의 보수로 표현된 음수 이진수의 10진수 변환
방법1) 제일 왼쪽 비트가 1인 경우 -를 곱하고, 나머지는 양수로 계산하여 더한다.
예) 11110001 → -128 + 64 + 32 + 16 + 1 = -15
방법2) 127보다 큰 수가 나올 경우(ex.10000000=128) 음수라는 것을 알 수 있다. 즉, 127보다 큰 수가 나올 경우 음수 변환을 위해 256(2^8)을 빼준다.
예) 11110001은 241>127이므로, 241-256 = -15
방법3) 비트반전 + 1
예) 11110001 비트반전 → 00001110 + 1 → 00001111 → 십진수로 15, 1로 시작하여 음수이므로 -붙여줌 → -15