2017-08-09 8 views
0

私は括弧で各シフトを包むときに、この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 

C開発者として私の視点からは、両方のCOEFRESPことを念頭に置きましたです。符号なし整数この文は同等である必要があります。

私の推測では、かっこがないときは、Pythonがvarの型について混乱していると思います。

+1

カッコは型には影響しませんが、演算子の優先順位をオーバーライドします。 – Barmar

+1

私はあなたのCレベルのコードを次のように置き換えます:* import struct; Coef = struct.unpack( "> L"、resp [:4])* – guidot

答えて

5

種類とは関係ありません。 は、<<よりも高い優先度を持ちます。

int.from_bytes(resp[:4], 'big') 
respは(良いチャンスがあります、それは する必要があります) bytesであれば、あなただけをすることができ、また、

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

:あなたの表現は次のように解析される(これはまた、C言語の場合あり)

あなたはstruct.unpackは、同じ仕事をすることができ、何らかの理由でPythonの2を使用するを持っている場合:

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

* from_bytes *はPython 2.xでは利用できません。 – guidot

+1

@guidot:ああ、私はこれがPython 2.7であることを忘れていました。 OPのアップグレードをお勧めします。 – Ryan

関連する問題