보수 개념과 파이썬 ~x
연산 (Bitwise reversion)
파이썬에서 ~
연산 설명이 레퍼런스에서 다음과 같이 되어있다.
Returns the complement of x - the number you get by switching each 1 for a 0 and each 0 for a 1. This is the same as -x - 1.
(https://wiki.python.org/moin/BitwiseOperators)
complement(보수)의 개념과 bitwise reversion 연산을 알아보자.
보수(complement)
사실 컴퓨터는 -
연산 개념이 없다.
컴퓨터에서 2-1
을 계산할 때 보수를 생성하여 2+보수값=1
로 계산한다.
즉, 보수는 컴퓨터에서 뺄셈 연산을 하기 위해 사용된다.
공식
만약 R진법이라면 R의 보수와 R-1의 보수가 존재한다.
-
R진법 N자릿수 X의 R의 보수 = R^N - X
-
R진법 N자릿수 X의 R-1의 보수 = R^N - 1 - X
예를 들어, 10진수 567의 9의 보수는, 10의 3승 - 1 - 567 = 999 - 567 = 432가 된다.
10의 보수는 이전 보수(9의 보수)에 +1을 하여 433이 된다.
1의 보수
2진법의 1의 보수는 조금 특별하게 계산할 수 있다.
그냥 비트 전체를 반전시키면 1의 보수이다.
예를 들어, 2진수 00110010의 1의 보수는 11001101
2의 보수
2의 보수는 1의 보수에서 +1을 하면 된다.
혹은, 그냥 비트의 최하위 비트(가장 오른쪽 비트)에서부터 1을 만날 때까지 그대로 쓰고, 1 뒤에부터는 반전하여 쓰면 된다.
2진수 11010010의 2의 보수는 0 -> 10 -> 1을 만났으니까 나머진 역으로, 00101110
[활용] 2의 보수를 이용한 10진법 뺄셈
-
~(one's complement) + 1 = two's complement
-
예시
a = 10
b = 3
c = a - b
d = a + (~b + 1)
print(c, d) #7 7
파이썬에서 '~' 연산자와 !
연산자의 차이점
둘 다 not operation을 수행한다.
~
는 비트 연산을 수행할 때, !
연산은 논리 연산을 수행할 때 사용한다.
'Python > Basic programming' 카테고리의 다른 글
[PyCharm] Deployment 서버 연결해서 사용하기 (0) | 2020.04.14 |
---|---|
파이썬의 Asterisk(`*`) 연산자 (0) | 2020.03.15 |
파이썬 비트 연산자 (Bitwise Operators) (0) | 2020.03.15 |
파이썬 연산자와 그에 대응하는 함수 (0) | 2020.03.15 |
문자열과 관련된 함수들 (0) | 2020.03.12 |