2016-12-30 5 views
0
var = 86 
print((var<90) & (var>=80)) 

파이썬 비트 연산자 '&'연산자

그러나

print(var<90 & var>=80) 
print(var<90 & (var>=80)) 
print((var<90) & var>=80) 
print(var<90 & True) 

`

왜 이러한 거짓주는 모든 않는 트루 준다? Operator precedence

의 일례를 print(var<90 & True) 걸리므

+3

왜 부울 연산을 수행하기 위해 비트 연산자를 사용하려고합니까? –

+0

'&'를'and'로 바꾸어보십시오. 네가하는 일이 실제로 의미가 없다. – 101

+0

나는 'and'연산자를 사용한다고 생각합니다. 나는 단지 이것이 왜 False를 제공했는지 알고 싶었습니다. @ IgnacioVazquez-Abrams –

답변

1

print(var<90 & True)

print(var < (90 & True))는 등가이며, 따라서 그것은 거짓 제공된다.

그러나 올바른 위치에 괄호를 넣으면 즉, print((var<90) & True)이면 True가 표시됩니다.

+0

어떤 연산자가 먼저 실행됩니까? – dsgdfg

+0

이 문서에는 '우선 순위'정의가 포함되어 있지 않습니다. 나는'a >> b & c를 물어 본다 < e dsgdfg

+1

@dsgdfg 문서에서 "다음 표는 파이썬에서 가장 낮은 우선 순위 (최소 바인딩)부터 가장 높은 우선 순위 (대부분의 바인딩)까지의 연산자 우선 순위를 요약 한 것입니다. 동일한 상자에있는 연산자의 우선 순위가 같습니다." –

0

비트 연산자 &이 비교 연산자보다 우선 순위가 높으므로 90 & var이 먼저 평가 된 다음 연결 비교가 수행됩니다.

>>> var = 86 
>>> var<90 & var>=80 # var<90, and '90&var' is greater than or equal to 80 
False 
>>> var<(90 & var)>=80 # same as above 
False 
>>> (var<90) & (var>=80) 
True 
3

부울 연산 대신 연산자 and을 사용해야합니다.

관계 연산자 체인 파이썬 지원하는 (즉, 대신 0 < var and var < 1000 < var < 100을 사용할 수 있습니다) 및 (즉, 덧셈, 뺄셈, 비트 연산 등)으로 인해 연산자 우선 순위에 전에 관계 연산자를 이항 연산을 처리하기 때문에, 실패의 모든 게시 한 사례는 실제로 다른 것을 의미합니다.

  1. var < 90 & var >= 80(var < 90 & var) and (90 & var >= 80)
  2. var < 90 & (var>=80)에 해당하는 4 경우보고되는 var < 90 & True에 해당합니다.
  3. (var<90) & var>=80도 역시 4 번째 경우와 유사합니다 (이 경우 True & var >= 80으로 해결되어 0 >= 80으로 해결됨).
  4. var < 90 & Truevar < (90 & True)과 같습니다. & 연산자의 구현은 피연산자 중 하나가 정수가 아닌 경우 (동적 입력의 가장 큰 함정 중 하나 인 경우) 0을 반환하도록 설계되었으므로 이러한 유사 명령문은 모두 var < 0 인 false로 해석됩니다.