Python プログラミングでは、ビット演算は 2 進数の演算に使用される非常に一般的な演算方法です。ただし、Python コードでビット演算を実行すると、エラーが発生し、プログラムが適切に実行されなかったり、間違った結果が出力されたりすることがあります。この記事では、いくつかの一般的な Python ビット操作エラーを紹介し、対応する解決策を提供します。
解決策: Python のビット演算子は整数にのみ適用できます。ビット単位の演算に負の数値を使用すると、間違った結果を引き起こす。したがって、ビット演算を実行するときは、使用される値が負でない整数であることを確認してください。負の数値に対してビット単位の演算を実行する必要がある場合は、その数値を補数形式に変換する必要があります。たとえば、次のコードではエラーが発生します。
a = -3 b = a << 2 #左移运算 print(b) #输出-12
上記のコードは、-3 を左 2 桁にシフトし、予想される -6 ではなく -12 になります。これは、Python では負の数値が補数形式で格納され、左シフト演算中に上位の符号ビットも左にシフトされ、結果にエラーが発生するためです。この問題を解決するには、負の数を符号なし整数に変換する必要があります。
a = -3 a = a & 0xffffffff #将负数转换为无符号整数 b = a << 2 #左移运算 b = b & 0xffffffff #确保结果为32位无符号整数 if b >> 31: #判断结果是否为负数 b = ~b ^ 0xffffffff #将32位无符号整数转换为补码形式 b = -b - 1 #将负数转换为十进制数 print(b) #输出-6
上記のコードでは、まず負の数 -3 を符号なし整数に変換し、次にビット演算を実行してから、結果は符号付き整数に戻されます。具体的には、最初に -3 と 0xffffffff に対してビット単位の AND 演算を実行して、32 ビットの符号なし整数を取得します。次に、左シフト演算を実行し、演算結果と 0xffffffff をビットごとに AND 演算して、結果が 32 ビットの符号なし整数になるようにします。次に、左シフトの結果が負の数の場合は、それを 2 の補数形式に変換し、最後に 2 の補数を 10 進数に変換する必要があります。
解決策: Python では、演算子の優先順位が適切です。かっこを追加するのを忘れた場合は、ビット演算エラーの原因となります。たとえば、次のコード:
a = 3 | 4 << 2 print(a) #输出19
上記のコードの予想される結果は 7 で、これは 3 または 4 よりも 2 ビット上に左シフトした結果です。しかし実際には、ビット演算子の優先順位がビット シフト演算子の優先順位よりも高いため、コードは最初に 4 << 2 を実行し、次に 3 | (4 << 2) を実行するため、エラーが発生します。結果。この問題を解決するには、括弧を追加し、ビット演算の前にビット シフト演算を置く必要があります:
a = (3 | 4) << 2 print(a) #输出28
上記のコードでは、括弧を使用して 3 | 4 を全体として扱い、次に左の演算を実行します。期待される結果を取得するためのシフト操作28.
解決策: Python でビット操作を実行するときは、値をバイナリに変換することに注意する必要があります2 進数の操作を修正するためのフォーム。たとえば、次のコード:
a = 0b1010 b = a & 1011 print(bin(b)) #输出0b1000
上記のコードの期待される結果は 0b1000 で、これは a と 1011 のビット単位の AND 演算の後に得られる 2 進数です。しかし実際には、接頭辞 0b または 0B のない 10 進数 1011 がビット演算に使用されるため、結果は正しくありません。この問題を解決するには、1011 をバイナリ形式に変換する必要があります。例:
a = 0b1010 b = a & 0b1011 print(bin(b)) #输出0b1000
上記のコードでは、1011 をバイナリ形式 0b1011 に変換し、ビット演算を実行して期待される結果 0b1000 を取得します。
まとめると、Python のビット演算は非常に実用的な演算方法ですが、ビット演算を実行するとエラーが発生しやすくなります。これらのエラーを回避するには、正しい数値型、演算子の順序、数値形式の使用に注意する必要があります。他によくあるビット操作エラーがある場合は、コメント領域で共有してください。
以上がPython のビット単位の算術エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。