비트 연산자는 다중 비트 값에 대해 작동하지만 개념적으로는 한 번에 한 비트 씩 작동하는 연산자입니다.
AND
두 입력이 모두 1 인 경우에만 1이고, 그렇지 않으면 0입니다.
OR
입력 중 하나 또는 모두 가 1이면 1이고 그렇지 않으면 0입니다.
XOR
정확히 하나 의 입력이 1 인 경우 에만 1이고, 그렇지 않으면 0입니다.
NOT
입력이 0 인 경우에만 1이고, 그렇지 않으면 0입니다.
이들은 종종 진리표로 가장 잘 표시 될 수 있습니다. 입력 가능성은 상단과 왼쪽에 있으며, 결과 비트는 입력의 교차점에 표시되는 4 개의 값 중 하나입니다 (입력이 하나뿐이므로 NOT의 경우 2 개).
AND | 0 1 OR | 0 1 XOR | 0 1 NOT | 0 1
----+----- ---+---- ----+---- ----+----
0 | 0 0 0 | 0 1 0 | 0 1 | 1 0
1 | 0 1 1 | 1 1 1 | 1 0
한 가지 예는 정수의 하위 4 비트 만 원하는 경우 15 (이진 1111)와 AND로 연결하면 다음과 같습니다.
201: 1100 1001
AND 15: 0000 1111
------------------
IS 9 0000 1001
이 경우 15의 0 비트는 효과적으로 필터 역할을하여 결과의 비트도 0이되도록합니다.
또한, >>
및<<
종종 비트 연산자로 포함되고, 그들은 "변화"를 각각 오른쪽 끝의 롤 당신이에서 0 비트쪽으로 이동하고, 공급하고 있다는 비트를 버리고, 일정한 수의 비트에 의해 왼쪽 값 다른 쪽 끝.
예를 들면 다음과 같습니다.
1001 0101 >> 2 gives 0010 0101
1111 1111 << 4 gives 1111 0000
Python의 왼쪽 시프트는 비트가 삭제되는 고정 너비를 사용하지 않는다는 점에서 특이합니다. 많은 언어가 데이터 유형에 따라 고정 너비를 사용하지만 Python은 단순히 너비를 확장하여 추가 비트를 수용합니다. Python에서 폐기 동작을 얻으려면 and
8 비트 값이 4 비트 왼쪽으로 이동하는 것과 같이 비트 단위로 왼쪽 이동을 수행 할 수 있습니다 .
bits8 = (bits8 << 4) & 255
그걸 염두에두고, 비트 연산자의 또 다른 예를 들어 당신이 8 비트 하나에 포장하려는 두 개의 4 비트 값이있는 경우, 당신은 운영자의 세 가지를 모두 사용 (수 있습니다 left-shift
, and
그리고 or
) :
packed_val = ((val1 & 15) << 4) | (val2 & 15)
- 그만큼
& 15
작업은 두 값 모두 하위 4 비트 만 갖도록합니다.
- 는
<< 4
이동 왼쪽 4 비트 시프트 인val1
상단에 8 비트 값 4 비트.
- 은
|
단순히이 두 가지를 함께 결합되어 있습니다.
val1
7이고 val2
4 인 경우
val1 val2
==== ====
& 15 (and) xxxx-0111 xxxx-0100 & 15
<< 4 (left) 0111-0000 |
| |
+-------+-------+
|
| (or) 0111-0100