이것은 제가 답을 찾을 수 없었던 매우 사소한 질문입니다.
여기에 문제가 있습니다.
#1
if 3 & 2:
print('True')
else:
print('False')
#1 result = True
# 2
if 5 & 2:
print('True')
else:
print('False')
#2 result = False
이유는 Bitwise 연산자라고 생각하지만이 상황을 이해하지 못합니다.
어떤 설명이라도 많이 주시면 감사하겠습니다.
여기에는 두 가지 일이 있습니다.
비트 연산 자체.
&
해당 비트가 두 피연산자 모두에서 1이고 다른 곳에서는 0 인 모든 비트에 대해 1을 갖는 숫자입니다. 이 경우 (이진) 5 & 2
피연산자 101
및 010
, 따라서 이진 출력 000
또는 decimal : 0
이있는 반면 3 & 2
, 피연산자 11
및 10
, 따라서 이진 출력 10
또는 decimal :이 2
있습니다.if
조건이 정수일 때 의 조치 :
5 & 2
경우 0
false로 처리되어 else
블록이 실행되는 반면, 3 & 2
경우에는 2
true로 처리되어 if
블록이 실행됩니다.이들을 합치고 2가 2의 정확한 거듭 제곱 (이 경우 2의 제곱 1)이라는 것을 상기하면, 이것이 본질적으로하는 일은 다른 숫자를 이진수로 쓰면 2의 숫자가 설정되었는지 테스트하는 것입니다 (예 : 1)과 같거나 아닙니다. 이 코딩 패턴은 일반적으로 비트 필드 를 나타내는 숫자가 있고 특정 비트가 설정되었는지 테스트하려는 경우에 사용됩니다. 예를 들어, 함수 의 flags
인수 os.open
(두 번째 인수)는 비트 필드입니다. 특정 관심 비트 flags
가 해당 함수에 보낼 수 있는 값에 설정되어 있는지 테스트 할 수 있습니다 .
import os
print(os.O_RDWR) # 2 - in binary 10
print(os.O_TRUNC) # 512 - in binary 1000000000
flags = os.O_RDWR | os.O_TRUNC # does bitwise OR to set the flags
print(flags) # 514 - in binary this is 1000000010
if flags & os.O_RDWR:
print("O_RDWR is set") # this print is executed because the 2s digit is set
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다