2013-04-06 6 views
4

<<=|= 연산자가 파이썬을 의미합니까? 나는 그들이 비트 연산자라고 생각한다. 나는 | (bitwise 또는) 연산자와 << (bit shifting) 연산자를 알고 있지만, =과 조합해서는 알지 못합니다.'='을 (를) 파이썬에서 비트 연산자에 추가하면 무엇이 있습니까? (예 : '<<'대신 '<<')

조각 번호는 this입니다. 아래의 코드는 해당 코드에 속합니다.

commandout = adcnum 
commandout |= 0x18 # start bit + single-ended bit 
commandout <<= 3 # we only need to send 5 bits here 
for i in range(5): 
    if (commandout & 0x80): 
     GPIO.output(mosipin, True) 
    else: 
     GPIO.output(mosipin, False) 
    commandout <<= 1 
    GPIO.output(clockpin, True) 
    GPIO.output(clockpin, False) 

답변

8

모두 현재 위치에서 과제이다; 그들은 name op= right-hand-expression의 공간에 효과적으로 name = name op right-hand-expression을 제공합니다.

commandout = commandout | 0x18 
commandout = commandout << 3 

것은 그것을 조금 지나치게 단순화되어 그 때문에 왼쪽 측 객체가 특별한 뭔가를 선택할 수 있습니다 이러한 작업을위한 전용 후크,;로

그래서 예를 들어, 당신은 그것을 읽을 수 list += rhs은 실제로 list.extend(rhs)이며, list = list + rhs이 아닙니다. 내부 연산자는 변경 가능한 개체에 새 개체를 만드는 대신 self에 변경 내용을 적용 할 수있는 기회를 제공합니다.

그러나, 예를 들어 commandout이 int 인 경우 불변의 값이 있으며 내부 값 의 값은입니다.

2

이들은 의 자리에 있습니다. 비트 산술 연산자입니다. 그들은 장소에서 LH 값을 수정 (또는 LH는 불변 인 경우 LH 값을 새로운 계산 된 값을 다시 할당)

파이썬을 호출 C. 같은 스타일 사업자와 shifting operators (<<>>) 및 binary bit operators (&, ^|). 조작 후의 =의 추가

는 할당 원래 LH 이름이므로 |=or 장소에서 작업을 수행하고 <<=는 현재 위치에서 왼쪽으로 이동을한다.

따라서 은 x=x<<3과 같거나 x 비트의 값이 왼쪽으로 3 자리 이동합니다.

비트 시프트 :

>>> b=0x1 
>>> b<<=3 
>>> bin(b) 
'0b1000' 

>>> b>>=2 
>>> bin(b) 
'0b10' 

비트 또는 다음 LH 값이 불변 인 경우

>>> bin(b) 
'0b1' 
>>> bin(c) 
'0b100' 
>>> c|=b 
>>> bin(c) 
'0b101' 

기술적 결과는 다소의 실제에서 적절한 변형보다 LH 이름 리바운드 가치.C 정수가 변하기 때문에

>>> import ctypes 
>>> i=ctypes.c_int(1) 
>>> ctypes.addressof(i) 
4299577040 
>>> i.value<<=3 
>>> ctypes.addressof(i) 
4299577040 

, 비트 시프트가 (이 경우, ctypes에서) C를 이용하여 달리

>>> id(i) 
4298178680  # original address (in CPython, id is the address) 
>>> i<<=3 
>>> id(i) 
4298178512  # New id; new int object created 

:

는 항목의 주소를 검사하여 표시 할 수있는 C int의 새 주소가없는 장소에서 수행됩니다.