1
의 비트 시프트는 일반적으로 저장하려는 비 독점적 인 값이있는 경우를위한 것입니다.
예를 들어, 상자의 모든면에 선을 그릴 수 있기를 원한다고 가정 해보십시오. 당신은 정의
LEFT_SIDE = 1 << 0 # binary 0001 (1)
RIGHT_SIDE = 1 << 1 # binary 0010 (2)
TOP_SIDE = 1 << 2 # binary 0100 (4)
BOTTOM_SIDE = 1 << 3 # binary 1000 (8)
----
0111 (7) = LEFT_SIDE | RIGHT_SIDE | TOP_SIDE
그런 다음 여러 측면 그들을 결합 할 수 있습니다 :
DrawBox (LEFT_SIDE | RIGHT_SIDE | TOP_SIDE) # Don't draw line on bottom.
가 완전히 다른 비트를 사용하고 있다는 사실은 서로 독립적임을 의미한다. OR
을 입력하면 1 | 2 | 4
이 7
과 같으며 다른 부울 연산으로 각 비트를 감지 할 수 있습니다 (이에 대한 설명은 here 및 here 참조).
1, 2, 3 및 4로 정의 된 경우 각면에 대해 하나의 호출을해야하거나 한 면당 4 개의 매개 변수를 전달해야합니다. 그렇지 않으면 두 값이 같은 값 (단순한 가산 연산)을 가지므로 LEFT and RIGHT
(1 + 2 = 3
)과 TOP
(3
)의 차이를 알 수 없습니다.
가 0x
물건 이진 비트 마스크를 쉽게 볼 수 있습니다 단지 16 진수입니다 (각 16 진수 정확히 사 개 진 자리에 해당합니다. 당신은 0x01
처럼 0x02
, 0x04
, 0x08
, 0x10
, 0x20
을 패턴을 참조하는 경향이 있습니다 및 그들은 하나의 1
비트가 가장 중요한 비트 위치를 향해 이동에 해당하는 것 때문에 등등 -이 값은 너무 이진 00000001
, 00000010
, 00000100
, 00001000
, 00010000
, 00100000
과 동등
0123.
옆 : 16 진수로 익숙해지면 1 << n
에 대해 거의 걱정할 필요가 없습니다. 즉시 0x4000
을 이진수 0100 0000 0000 0000
으로 인식 할 수 있습니다. 나의 선호하는 방법이 : 당신이 코드에서 값 16384을 보면 우리 중 일부는 심지어 그 :-)
어떤 식으로'0x2' * 아닌 "일반 정수 값"입니까? 그것은 완전히 정상입니다.'1 << 1'에 대해서는 당연히 하나의 값이 아닌 표현식이지만 결과는 여전히 "일반 정수 값"입니다. – Timwi