Python のビット単位の算術エラーを解決するにはどうすればよいですか?

PHPz
リリース: 2023-06-24 19:14:35
オリジナル
1072 人が閲覧しました

Python プログラミングでは、ビット演算は 2 進数の演算に使用される非常に一般的な演算方法です。ただし、Python コードでビット演算を実行すると、エラーが発生し、プログラムが適切に実行されなかったり、間違った結果が出力されたりすることがあります。この記事では、いくつかの一般的な Python ビット操作エラーを紹介し、対応する解決策を提供します。

  1. エラー: ビット単位の演算に負の数値を使用する

解決策: 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 進数に変換する必要があります。

  1. エラー: ビットごとの演算子を使用するときにかっこを追加するのを忘れました

解決策: 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.

  1. エラー: ビット操作を使用するときにバイナリ形式に変換するのを忘れました

解決策: 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート