비트단위 연산이란 무엇을 의미하나?
00001111 과 같이 표현되어 있는 비트단위로 표현된 것을 단어 그대로 연산(덧셈 등 사칙 연산 부터 And, OR,...등 논리 연산)한다는 것이다.
반대로 뒤집는 다고 생각하면 쉽다. 예를 들어서 1010있으면
~1010은 0101이 된다. 하지만 Python에서 이렇게 print를 하면 원하는 값을 표현할 수 없다.
Print문을 통해 출력해서 표현 될때 10진수로 표현이 되는 데,
해당 프로그램 안에서 32비트 2진수로 표현을 한다.
a= 2
print(~a)
# ~3
# a = 00000000 00000000 00000000 00000010
# ~a = 11111111 11111111 11111111 11111101
이때는 두개의 변수가 필요하다. 변수 두개를 가지고 논리연산을 진행한다. 두 변수의 값에 모두 포함 된 숫자만 나온다.
a= 69
b= 37
print(f'a = {bin(a)}, b = {bin(b)}')
print(f'{bin(a&b)}')
#a = 0b1000101, b = 0b100101
#0b101
이때에도 두개의 변수가 필요하다. 변수 두개를 가지고 논리연산을 진행한다. 두 변수의 값에 한번이라도 들어가 있는 값이 있다면 나온다.
a= 69
b= 37
print(f'a = {bin(a)}, b = {bin(b)}')
print(f'{bin(a|b)}')
#a = 0b1000101, b = 0b100101
#0b1100101
역시 이때도 비교논리 연산자 답게 두개의 변수를 가지고 진행해야한다.
a= 69
b= 37
print(f'a = {bin(a)}, b = {bin(b)}')
print(f'{bin(a^b)}')
#a = 0b1000101, b = 0b100101
#0b1100000
a= 69
print(f'a = {bin(a)}')
print(f'{bin(a<<1)}')
#a = 0b1000101
#a<<1 => 0b10001010
a= 69
print(f'a = {bin(a)}')
print(f'a>>1 => {bin(a>>1)}')
#a = 0b1000101
#a>>1 => 0b100010
참조(REF.)
1. 코드업:https://codeup.kr/problemsetsol.php?psid=33