파이썬에서 >>와 <<는 무엇을 의미합니까?


90

나는 2 << 564 1000 >> 2를 얻고 250을 얻는 것과 같은 일을 할 수 있음을 알았습니다 .

또한 다음 >>에서 사용할 수 있습니다 print.

print >>obj, "Hello world"

여기서 무슨 일이 일어나고 있습니까?



3
여기, 지금 당신이 검색 엔진에 그 문자를 연결하고 실제로 검색 할 수 있습니다 : symbolhound.com은
user2357112 모니카 지원


3
@ user2357112 정말 도움이 될 것입니다, 감사합니다. 나는이 문서에 그를 찾아 볼 생각도 못했을 있도록 그리고 그에게 ..., 그것은 기본적인 질문이있을 수 있습니다이야 말,하지만 난 비트 연산자의 개념이 없었다
user3201152

@joaquin 이제 python에 대한 google에서 다음보다 큰 결과가 1 위입니다.
Jordan Reiter 2016

답변:


63

나는 그것이 중요한 질문이라고 생각하고 아직 답변되지 않았습니다 (OP는 이미 시프트 연산자에 대해 알고있는 것 같습니다). 대답 해 보겠습니다. >> 연산자는 두 가지 다른 목적으로 사용됩니다. C ++ 용어에서이 연산자는 오버로드됩니다. 첫 번째 예에서는 비트 연산자 (왼쪽 시프트)로 사용되는 반면 두 번째 시나리오에서는 출력 리디렉션으로 만 사용됩니다. 즉

2 << 5 # shift to left by 5 bits
2 >> 5 # shift to right by 5 bits
print >> obj, "Hello world" # redirect the output to obj, 

with open('foo.txt', 'w') as obj:
    print >> obj, "Hello world" # hello world now saved in foo.txt

최신 정보:

파이썬 3에서는 다음과 같이 파일 인수를 직접 지정할 수 있습니다.

print("Hello world", file=open("foo.txt", "a")) # hello world now saved in foo.txt

11
Python 코드에서 볼 수있는 오른쪽 시프트 연산자의 또 다른 일반적인 사용은 Airflow 파일에서 발생합니다. Airflow 프레임 워크는 '>>'연산자를 오버로드하여 한 작업이 다른 작업보다 업스트림임을 나타냅니다. stackoverflow.com/questions/52389105/…
schimmy

3
실제로 __rshift____lshift__메서드 를 통해 이러한 연산자를 재정의 할 수 있습니다 .
trudolf

2 >> 5는 0과 같습니다. 0.0001과 같아야한다고 생각했습니다.
lightbox142

1
@ teter123f 작업은 바이너리입니다. 소수점 연산이 아닙니다.
yosemite_k

61

이들은 비트 시프트 연산자입니다.

문서 에서 인용 :

x << y

xy 자리만큼 왼쪽으로 이동 한 비트를 반환 합니다 (오른쪽의 새 비트는 0 임). 이 승산과 동일 x하여 2**y.

x >> y

xy 자리만큼 오른쪽으로 이동 한 비트를 반환 합니다. 이것은 분할과 동일 x하여 2**y.


2
아마도 예, 도움이 파이썬에서 이러한 일련의 입력합니다 : print bin(1), print bin(1 << 1), print bin(17), print bin(17 >> 1)등. 설명없이 어떻게 작동하는지 볼 수 있습니다.
bartekbrak

4
비트 시프트 연산자에는 2 개의 피연산자가 필요하므로 피연산자가 "인쇄"이고 피연산자 2가 객체 인 이유는 무엇입니까? 에서print >>obj, "Hello world"
Qi Fan

이는 OP가 제공 한 (따라서 OP에 알려진) 컨텍스트에 대한 답변이며 질문에 대한 답변이 아닙니다.
z33k

@Qi Fan @ z33k이 답변이 작성된 지 1 년이 넘도록 인쇄에 대한 참조를 추가하기 위해 질문이 편집되었습니다. 원래 질문 만 언급 2 << 5되고 1000 >> 2 ¯_ (ツ) _ / ¯
James

24

12 << 2

48

위의 명령문을 실행할 때 실제 이진 값 12는 "00 1100"입니다. Left shift (왼쪽으로 2 자리 이동)는 값 48을 반환합니다. 이진수 값은 "11 0000"입니다.

48 >> 2

12

이진 값 48은 "11 0000"이며 위의 명령문을 실행 한 후 Right shift (오른쪽으로 2 자리 이동)는 값 12를 반환합니다. 이진 값은 "00 1100"입니다.


12

관련된 다른 경우 print >>obj, "Hello World"는 Python 2 의 print 명령문 에 대한 "print chevron"구문입니다 (Python 3에서 제거되고 함수file인수 로 대체 됨 ). 표준 출력에 쓰는 대신 출력이 메서드에 전달됩니다 . 일반적인 예는 메서드 가있는 파일 개체 입니다. 최근 질문에 대한 답변을 참조하십시오. Double greater-than sign in Python .print() obj.write()write()


11

그들은 많은 주류 프로그래밍 언어에 존재하는 비트 시프트 연산자이며 <<왼쪽 시프트이고 >>오른쪽 시프트입니다. 다음 표와 같이 설명 할 수 있습니다. 정수는 메모리에서 1 바이트 만 사용한다고 가정합니다.

| operate | bit value | octal value |                       description                        |
| ------- | --------- | ----------- | -------------------------------------------------------- |
|         | 00000100  |           4 |                                                          |
| 4 << 2  | 00010000  |          16 | move all bits to left 2 bits, filled with 0 at the right |
| 16 >> 2 | 00000100  |           4 | move all bits to right 2 bits, filled with 0 at the left |

이 설명을 정확히 검색합니다.
shaik moeed

7

이들은 시프트 연산자입니다

x << y 비트가 y 자리만큼 왼쪽으로 이동 한 x를 반환합니다 (오른쪽의 새 비트는 0 임). 이것은 x에 2 ** y를 곱하는 것과 같습니다.

x >> y y 자리만큼 오른쪽으로 비트를 이동 한 x를 반환합니다. 이것은 // 'x를 2 ** y로하는 것과 같습니다.


0
<< Mean any given number will be multiply by 2the power
for exp:- 2<<2=2*2'1=4
          6<<2'4=6*2*2*2*2*2=64
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.