[Python] 논리 연산과 비트 연산

변도진·2일 전

Python

목록 보기
17/17

들어가며

최근 즐겨쓰는 패턴이 있었는데, 논리연산과 비트연산의 차이로 인해 오류나서 글을 적게 되었다.

valid 패턴

난 valid 검증에 다음과 같은 패턴을 즐겨쓴다.

def is_valid():
	valid = True
    valide &= 조건_1
    valide &= 조건_2
    valide &= 조건_3
    valide &= 조건_4
    
    return valid

그러나 다음과 같은 문제가 발생했다.

li = [1, 2]
valid = True
valid &= len(li)

값을 예측해보자.
난 True를 예상했지만 값은 False가 뜨게 되었다.
이는 &가 논리 연산이 아닌 bit연산이기 때문이다.

Python에서 bool은 int의 subclass이다.
int -> bool은 0은 False 아니면 True이지만
bool -> intfalse는 0, True는 1이다.

bit연산은 int기준으로 되기에 1을 기준으로 &연산을 실행한다.
그렇기에 0110&하여 00이 나오게 되었다.
논리연산으로 2 and True를 하면 True가 나오지만,
비트연산으로 2 & True를 하면 0이 나온다.

다음과 같은 패턴이 한줄로 조건을 정렬할 수 있어서 애용하였지만,
논리연산을 명확히 명시하여 사용하는 것이 좋겠다.

profile
낚시하고 싶다.

0개의 댓글