python表达式中括号的语义是什么?

0x0*_*818 0 python python-2.7

当我用括号包装每个班次时,这个python语句给出了期望值,否则它给出0:

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
Run Code Online (Sandbox Code Playgroud)

从我作为C开发人员的角度来看,考虑到Coefresp都是无符号整数,这些语句应该是等价的.

我的猜测是,当括号不存在时,Python对var的类型感到困惑.

Ry-*_*Ry- 5

与类型无关; +优先级高于<<.(这也是C中的情况.)您的表达式被解析为:

((0xFF & resp[0])
    << (24 + (0xFF & resp[1]))
    << (16 + (0xFF & resp[2]))
    << (8 + 0xFF & resp[3]))
Run Code Online (Sandbox Code Playgroud)

此外,如果respbytes(它应该是一个很好的机会),你可以:

int.from_bytes(resp[:4], 'big')
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因必须使用Python 2,struct.unpack可以做同样的工作:

Coef, = struct.unpack('>I', resp[:4])
Run Code Online (Sandbox Code Playgroud)