2017-08-09 72 views
0

這蟒蛇結給人的期望值時,我換用括號每個班次,否則給0:python表達式中括號的語義是什麼?

Coef = ((0xFF&resp[0])<<24) + ((0xFF&resp[1])<<16) + ((0xFF&resp[2])<<8) +(0xFF&resp[3])) #OK 

Coef = (0xFF&resp[0])<<24 + (0xFF&resp[1])<<16 + (0xFF&resp[2])<<8 +0xFF&resp[3]) #NOK 

從我的角度爲C語言開發點,銘記這兩個Coef中RESP無符號整數這個語句應該是等價的。

我的猜測是Python在括號不存在時對var的類型感到困惑。

+1

括號不會影響類型,它們只是覆蓋運算符優先級。 – Barmar

+1

我會替換你的C級代碼:* import struct; Coef = struct.unpack(「> L」,resp [:4])* – guidot

回答

5

與類型無關; +<<具有更高的優先級。 (這也是C的情況下),你的表達被解析爲:

((0xFF & resp[0]) 
    << (24 + (0xFF & resp[1])) 
    << (16 + (0xFF & resp[2])) 
    << (8 + 0xFF & resp[3])) 

而且,如果respbytes(有一個很好的機會,它應該是),你可以:

int.from_bytes(resp[:4], 'big') 

如果使用Python 2出於某種原因,struct.unpack可以做同樣的工作:

Coef, = struct.unpack('>I', resp[:4]) 
+1

* from_bytes *在Python 2.x中不可用,替代方法請參閱我的評論。 – guidot

+1

@guidot:哦,我錯過了這是Python 2.7。會推薦OP升級。 – Ryan

相關問題