티스토리 뷰

숫자형 사칙연산을 하다 보니 갑자기 "비트 연산자를 정리하자."라는 생각을 하게 되었다.

 

비트 연산은 아래와 같이 6개 정도 존재한다.

 

연산자 설명
& 논리곱으로 서로가 동일한 값이 존재해야지 결과가 나옴 and 연산
| 논리합으로 한쪽만 맞아도 결과가 나옴. or 연산
^ xor 연산. 논리합의 반대로 계산됨.
~ 이진수를 모두 반대로 변경해 버림
<< 왼쪽으로 비트 이동함. n번 만큼 2를 곱함.
>> 오른쪽으로 비트 이동. n번 만큼 2를 나눔.

비트 연산의 설명은 위와 같고 예시로 아래와 같이 5, 7을 이진수로 하여서 계산을 해보자.

 

 

>>> 5 & 7
5

& 연산의 경우 각 자리수 마다, 곱하기를 하면 된다. 그렇게 될 경우 00000101 값이 나오게 되고 5라는 결과값을 얻을 수 있다.

>>> 5 | 7
7

| 연산의 경우 각 자리수마다 1이 한 곳이라고도 있으면 1로 채워주면 된다. 따라서 00000111의 값이 되고 10진수로 변환을 하면 7이라는 값이 된다.

>>> 5 ^ 7
2

^ 연산은 | 연산자의 반대로 생각을 하면 된다. 각 자릿수 모두가 1을 가지고 있으면 0으로 결과를 반환하면 된다.

>>> ~5
-6

~를 사용하게 되면 00000101의 이진수를 11111010으로 반대로 변환하여 음수를 만든다. 음수로 바꾸면 보수처리를 하기 위해 + 1을 한다. 그러나 ~연산은 단순히 값을 반대로 옮긴 것이기 때문에 보수처리 없이 -6 값이 나오게 된다.

>>> 5 << 1
10

설명은 왼쪽으로 비트를 이동시킨다고 이야기를 하는데 쉽게 생각해서 5 * 2로 생각하면 된다. 만약에 5 << 2으로 하게 되면 5 * 2 * 2라고 계산이 되어서 20이라는 결과값을 얻게 된다.

>>> 5 >> 1
2

>> 연산은 반대로 비트를 오른쪽으로 이동시키는 것인데 쉽게 생각해서 5 / 2의 몫이 값으로 나오는 것이다. 5 >> 2으로 하게 되면 5 / 2 / 2 라고 계산이 되어 1이라는 값이 나온다.

 

프로그래밍을 하다보면 비트 연산자를 사용할 일은 없는 듯하다. 다만 if문을 사용할 때 &, | 연산자 정도 사용한다. 그렇지만 다른 사람이 작성한 소스를 보다 보면 간혹 비트 연산자를 사용하는 경우가 있다. 특히 암호화 알고리즘을 보다 보면 비트 연산자를 사용하게 된다. 그럴 때 쉽게 읽기 위해서 미리 알아두고 있는 편도 나쁘지 않다고 생각이 된다.

'IT기술, 프로그래밍 > python' 카테고리의 다른 글

python 문자열(String) 합치기, 곱하기  (0) 2019.11.10
python 작은따옴표('), 큰따옴표(") 역할  (0) 2019.11.10
python 변수선언 - 숫자형  (0) 2019.11.03
python 설치  (0) 2019.11.03
Jupyter 설치 방법  (0) 2019.11.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함