티스토리 뷰

AI/Python

[python] 비트 NOT 연산자 ~x

brave_sol 2024. 7. 10. 20:03

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

 

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함