2017-03-26 13 views
1

私はbitwise演算子でいくつかの作業をしています。通常、bin()を使って整数を変換します。私はそれぞれの試行でエラーが発生しています。なぜbinthonの演算子がbin()の返り値で動作しないのですか

foo = 5 
binfoo = bin(foo) 
bar = ~(binfoo) 

最後の行は、私たちが混乱するところです。

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: bad operand type for unary ~: 'str' 

bin()が文字列を返す場合、これらのビット演算子は何を期待していますか?

+1

ビット演算子は整数を期待していますので、 '〜foo'を試してみてください。 'bin'関数はバイナリ*文字列表現*を作成して出力します。 – jonrsharpe

+0

'bin()'は整数ではなく文字列を返します(ビット演算子は文字列ではなく*整数*で動作します)。 –

+0

フードの整数*は*ビットパターンです - ビットワイズ演算子が直接作業します。これらのビットパターンの文字列表現では機能しません。なぜビット演算子は 'bin()'を使って「通常始まる」と思いますか?実際、彼らは決してそのように始まらない。それでも、これは、プログラミングに新しい人が尋ねるのはかなり自然な問題であるという意味で、有用な質問です。私はそれがdownvoteに値するとは思わない。 –

答えて

3

~単項ビット演算子は、整数入力を必要とします。 Pythonのリファレンスドキュメントの表現章のUnary arithmetic and bitwise operations sectionから:

単項~(反転)演算子は、整数の引数のビット単位の反転をもたらします。 xのビット単位の反転は-(x+1)と定義されています。これは整数にのみ適用されます。

太字強調。

~5に作品を適用するだけで罰金:

>>> ~5 
-6 

bin()関数は数のバイナリ表現で文字列オブジェクトを返します。これをデバッグツールと考えてください。何が素早くビットが設定されているかを示し、整数には設定されません。ビットを実際に操作するには、依然として整数が必要です。

関連する問題