programing

Python에서 >>와 <<>는 무엇을 의미합니까?

copyandpastes 2022. 9. 13. 23:40
반응형

Python에서 >>와 <<>는 무엇을 의미합니까?

나는 내가 할 수 있는 것을 알아차렸다.2 << 564점을 받고1000 >> 2250을 얻습니다.

또한 사용할 수 있습니다.>>print:

print >>obj, "Hello world"

여기서 무슨 일이 일어나고 있는 거야?

>>이 예에서는 연산자가 두 가지 용도로 사용됩니다.C++ 용어로 이 연산자는 오버로드됩니다.첫 번째 예에서는 비트 연산자(오른쪽 시프트)로 사용됩니다.

2 << 5  # shift left by 5 bits
        # 0b10 -> 0b1000000
1000 >> 2  # shift right by 5 bits
           # 0b1111101000 -> 0b11111010

두 번째 시나리오에서는 출력 리다이렉션에 사용되는 동안 다음과 같이 파일 개체와 함께 사용합니다.

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

의 두 번째 사용>>Python 2에서만 작동했습니다.Python 3 에서는, 다음의 출력을 리다이렉트 할 수 있습니다.print()사용방법file=인수:

with open('foo.txt', 'w') as f:
    print('Hello world', file=f)  # "Hello world" now saved in foo.txt

이들은 비트 단위 이동 연산자입니다.

문서로부터의 인용:

x << y

돌아온다x(오른쪽의 새 비트는 0)으로 이동합니다.이것은 곱셈과 같다.x타고2**y.

x >> y

돌아온다x비트가 오른쪽으로 y개씩 이동한다.이것은 나누는 것과 같다.x타고2**y.

12 < < 2

48

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

48 >> 2

12

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

이들은 많은 주류 프로그래밍 언어에 존재하는 비트 시프트 연산자입니다.<<왼쪽 시프트와>>는 올바른 시프트입니다.다음 표와 같이 설명할 수 있습니다.정수가 메모리에서 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 |

또 다른 케이스는print >>obj, "Hello World"의 "프린트 쉐브론" 구문입니다.print Python 2의 스테이트먼트(Python 3에서 삭제, Python 3으로 대체)file의 논거print() 기능).출력은 표준 출력에 쓰는 대신obj.write()방법.일반적인 예로는 다음과 같은 파일 객체가 있습니다.write()방법.다음 질문에 대한 답변을 참조하십시오.Python에서는 두 배 이상의 기호가 있습니다.

이들은 교대 연산자들입니다.

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

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

"비트 단위" 연산자입니다.https://wiki.python.org/moin/BitwiseOperators

>>> help("symbols")

+-------------------------------------------------+---------------------------------------+
| Operator                                        | Description                           |
|=================================================|=======================================|
| "<<", ">>"                                      | Shifts                                |
+-------------------------------------------------+---------------------------------------+
| "&"                                             | Bitwise AND                           |
+-------------------------------------------------+---------------------------------------+
| "|"                                             | Bitwise OR                            |
+-------------------------------------------------+---------------------------------------+
| "~x"                                            | bitwise NOT                           |
+-----------------------------------------------------------------------------------------+
| "^"                                             | Bitwise XOR                           |
+-------------------------------------------------+---------------------------------------+

x << y 십중팔구 비트는 y자리만큼 왼쪽으로 이동하며 오른쪽에 있는 새 비트는 0입니다.2**y라고 합니다.

x >> y 오른쪽으로 y자리만큼 이동된 비트와 함께 x를 반환합니다.//'xx2**y'입니다.

python 3.9에서는 연산자 " | "가 사전을 병합합니다.

https://docs.python.org/3.9/whatsnew/3.9.html

>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}

2 < 5 (왼쪽 시프트)

2비트(2진수)를 왼쪽으로 5비트 이동.(오른쪽 0으로 표시)

bin(16) # '0b10'

shifted = bin(2) + '0' * 5 # '0b1000000'

int(shifted, 2) # 64
2 << 5 # 64

1000 >> 2 (오른쪽으로 이동)

1000(2진수)을 오른쪽으로 2비트 이동.(왼쪽은 0입니다.)

bin(1000) # '0b1111101000'

# add 00 to the left and remove last digit from the right
# '0b 00(add these bits) 11111010 00(remove these bits)'
shifted = '0b0011111010'

int(shifted, 2) # 250
1000 >> 2 # 250

Python 2.7과 Python 3.8에서 아래 사항을 확인하였습니다.

인쇄했습니다(100<3) 100을 2진수로 변환하면 1100100이 됩니다.처음 3비트를 드롭하고 마지막에 값이 '0'인 3비트를 더했습니다.따라서 0100000이 됩니다.이 값을 Decimal로 변환하면 답은 32입니다.

인쇄(100<3)를 실행했을 때의 대답은 800이었습니다.나는 당황했다.무슨 일이 일어나고 있는지 확인하기 위해 800을 바이너리로 변환했습니다.이게 1100100000입니다

800이 Python의 답변인 것을 알 수 있다면, 그들은 처음 3비트를 옮기거나 떨어뜨리지 않고 마지막 3비트에 '0' 값을 더했습니다.

print(100>>3)에서는, 완전하게 동작.수동 계산을 하고 python에서 프린트 결과를 확인했습니다.제대로 작동했어요.마지막 3비트를 드롭하고 처음 3비트에 값 '0'을 추가합니다.

(100<3)처럼 보입니다.왼쪽 시프트 연산자는 Python에 버그가 있습니다.

<< 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

언급URL : https://stackoverflow.com/questions/22832615/what-do-and-mean-in-python

반응형