2017-08-09 54 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

相关问题