프로그래밍/Python

파이썬에서 쓰이는 비트연산

Dibrary 2022. 9. 2. 09:50
반응형

안녕하세요 Dibrary입니다.

이번에는 비트연산자를 사용하는 방법에 대해 정리해보겠습니다.

 

입력 정수에 대해서 2진수로 바꾸려면 for문을 돌면서 나눈 나머지를 합하는 방법도 있습니다만, 파이썬은 쉬운 방법을 가지고 있습니다.

123이라는 입력 변수를 bin으로 확인하면 2진수 숫자가 나옵니다. 해당 자료형은 '문자열'입니다.

2진수 숫자 '문자열'을 다시 int에 넣고 2진수임을 알려주면 원래 10진수 숫자가 나옵니다.

 

그럼 n진수로 된 숫자는 int만 쓰면 다시 원래대로 바꿀 수 있을까요? 저도 궁금해서 for문으로 확인해보았습니다.

되는 경우도 있고, 안 되는 경우도 있는데, 36 이후부터는 다 안됩니다.

 

알고리즘 문제를 풀다 보면 2진수, 3진수, 8진수, 16진수 정도가 가장 많이 나올텐데, 2나 16진수는 손쉽게 변경할 수 있겠네요.

 


그럼 위에서 123을 2진수로 만든 값에 ~(NOT)을 적용해보겠습니다.

123의 2진수 값에 1을 하나 더해준 후에 맨 앞에 -부호가 붙은 꼴입니다.

참고로 NOT은 '문자열'에 적용이 되지 않습니다. 따라서 bin으로 나온 값에 따옴표를 지워주시고 사용하면 됩니다.

 


나머지는 가장 많이 쓰는 AND, OR, XOR 입니다. 알고리즘 풀 때 간간히 쓰곤 하죠.

먼저 AND입니다. AND는 비트 위치가 비교 대상 두 개 모두 1이어야 1이고 나머지는 모조리 0으로 다룹니다.

위 코드에서 첫 번째는 둘 다 1인데, 두 번째는 다르므로 0 즉 2진수로 10값은 10진수로 2입니다.

OR는 두 개 중에 하나라도 1이 있으면 1로 취급합니다. a와 b를 비교해 볼 때 첫 번째 자리에 1, 두 번째 자리에 1 그래서 2진수로 11이 되고, 10진수로는 3이 되는것이죠.

XOR은 값이 달라야 1이고 같으면 0이 됩니다. a와 b를 비교해 볼 때 첫 번째 자리는 둘 다 1이므로 0, 두 번째 자리는 서로 다른 값이므로 1 따라서 2진수로 01이고, 10진수로는 1이 됩니다.

 


비트의 위치를 옮긴 값도 만들어 낼 수 있습니다.

처음 값이 2인데, 1비트 왼쪽으로 옮기면 4가 되고, 한 번 더 옮기면 8이 되죠. 따라서 <<를 쓰면 각 값이 *2만큼 증가하는 것을 볼 수 있습니다.

 

왼쪽으로 이동이 가능하면 오른쪽으로도 이동이 가능하겠죠?

네 오른쪽으로 이동하게 되면 아까 *2 대신에 /2를 계산한 것과 같은 결과를 냅니다.

728x90
반응형