Python3でビット演算を使用して2つの整数を加算する際の無限ループ

マトリックス氏

Pythonコードを使用して問題を解決しようとしています。このコードでは、「+」または「-」演算子を使用せずに2つの整数を追加する必要があります。私は2つの正の数に対して完全に機能する次のコードを持っています:

def getSum(self, a, b):

    while (a & b):
        x = a & b
        y = a ^ b
        a = x << 1
        b = y

    return a ^ b

このコードは、入力が2つの正の整数または2つの負の整数の場合は完全に機能しますが、一方の数値が正でもう一方の数値が負の場合は失敗します。それは無限ループに入ります。なぜこれが起こっているのかについて何か考えはありますか?

編集:これは、このためのコード修正について説明しているリンクです。

cxw

Python 3には、任意精度の整数( "bignums")があります。この手段は、いつのことにx否定的である、x << 1ようになりますx倍の大きさで負の数を。ゼロが右からシフトインすると、数値がどんどん大きくなります。

2の補数では、正の数は0最上位ビットにあり、負の数は1最上位ビットにあります。その唯一の場合、手段aとがb負である、のトップビットはab異なります。したがって、x正(1 & 0 = 0)にyなり、負(1 ^ 0 = 1)になります。したがって、newaは正(x<<1)になり、newbは負(y)になります。

現在:任意精度の負の整数には、1少なくとも数学的には、実際には無限の数の先行ビットがあります。だから、a2各反復で拡大ますます大きな正の数です。b続けて、より取得し、多くの主要な1追加のビットは、ビットごとに行うことができるように&^してをaしたがってa、オンになっている1ビットはbの追加ビットの1つと一致するa & bため、常にtrueであるため、ループは永久に実行されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ビット演算を使用して2つの整数を加算する際の無限ループ?

分類Dev

Pythonで有効な2つの整数を加算するために2つの加算演算子を使用していますか?

分類Dev

ビット演算子を使用して2つの整数を比較する

分類Dev

1だけを使用して2つの整数を加算する

分類Dev

ビット演算子とビット操作を使用して、Cで2つの整数を交換するにはどうすればよいですか?

分類Dev

Python3のスレッドプール内で無限ループを終了する安全な方法

分類Dev

ビジュアルフォーマット言語を使用して2つのビューを制限する

分類Dev

ビット演算子を使用して2つのブール値をインターリーブする方法は?

分類Dev

キャリーを使用して再帰的に2つの整数を加算する

分類Dev

API呼び出しでFutureBuilderを使用する際の無限ループ

分類Dev

私はPython3で無限のwhileループを作成することができました

分類Dev

無限ループを使用してpython3で円周率を計算しようとしています:

分類Dev

パイプ演算子を使用して、2つのPythonスクリプト間でデータの複数のバッチをストリーミングする

分類Dev

2つの与えるセルのすべてのパスを見つける際に、無限ループから深さ優先探索(DFS)を回避します

分類Dev

VLCを使用して無限のビデオループのストリームをホストする

分類Dev

演算子のオーバーロードを使用して、2つの分数の加算を単純化する方法は?

分類Dev

ビット操作を使用してCで+演算子を使用せずに2つの数値を追加する方法

分類Dev

Python3で無限のwhileループを防ぐ方法

分類Dev

Pythonでスレッドを使用して無限ループを実行する

分類Dev

python3で1つのforループを使用してリスト内の文字列から数字を削除するにはどうすればよいですか?

分類Dev

Python3を使用してラズベリーパイ2でpyfirmataを実行する際の問題

分類Dev

--enable-sharedを使用してPython3をインストールする際の問題

分類Dev

ネストされたforループを使用してPythonで2つのExcelシートを比較する際の問題

分類Dev

Rでggplot2を使用してgpxファイルをプロットする際のエラーを修正

分類Dev

JavaScriptでマージソートを構築する際の無限ループ

分類Dev

ビット単位の演算子を使用してループバックモデルを要求できますか?

分類Dev

SQL:カウント、加算、その他の制限付きで3つのテーブルを結合する

分類Dev

TkinterとPython3を使用して32ビットのunsignedint画像を表示する

分類Dev

整数で提供されるのと同じビット数を使用して可能な最大範囲を計算する際にビット演算子がエラーを生成する理由

Related 関連記事

  1. 1

    ビット演算を使用して2つの整数を加算する際の無限ループ?

  2. 2

    Pythonで有効な2つの整数を加算するために2つの加算演算子を使用していますか?

  3. 3

    ビット演算子を使用して2つの整数を比較する

  4. 4

    1だけを使用して2つの整数を加算する

  5. 5

    ビット演算子とビット操作を使用して、Cで2つの整数を交換するにはどうすればよいですか?

  6. 6

    Python3のスレッドプール内で無限ループを終了する安全な方法

  7. 7

    ビジュアルフォーマット言語を使用して2つのビューを制限する

  8. 8

    ビット演算子を使用して2つのブール値をインターリーブする方法は?

  9. 9

    キャリーを使用して再帰的に2つの整数を加算する

  10. 10

    API呼び出しでFutureBuilderを使用する際の無限ループ

  11. 11

    私はPython3で無限のwhileループを作成することができました

  12. 12

    無限ループを使用してpython3で円周率を計算しようとしています:

  13. 13

    パイプ演算子を使用して、2つのPythonスクリプト間でデータの複数のバッチをストリーミングする

  14. 14

    2つの与えるセルのすべてのパスを見つける際に、無限ループから深さ優先探索(DFS)を回避します

  15. 15

    VLCを使用して無限のビデオループのストリームをホストする

  16. 16

    演算子のオーバーロードを使用して、2つの分数の加算を単純化する方法は?

  17. 17

    ビット操作を使用してCで+演算子を使用せずに2つの数値を追加する方法

  18. 18

    Python3で無限のwhileループを防ぐ方法

  19. 19

    Pythonでスレッドを使用して無限ループを実行する

  20. 20

    python3で1つのforループを使用してリスト内の文字列から数字を削除するにはどうすればよいですか?

  21. 21

    Python3を使用してラズベリーパイ2でpyfirmataを実行する際の問題

  22. 22

    --enable-sharedを使用してPython3をインストールする際の問題

  23. 23

    ネストされたforループを使用してPythonで2つのExcelシートを比較する際の問題

  24. 24

    Rでggplot2を使用してgpxファイルをプロットする際のエラーを修正

  25. 25

    JavaScriptでマージソートを構築する際の無限ループ

  26. 26

    ビット単位の演算子を使用してループバックモデルを要求できますか?

  27. 27

    SQL:カウント、加算、その他の制限付きで3つのテーブルを結合する

  28. 28

    TkinterとPython3を使用して32ビットのunsignedint画像を表示する

  29. 29

    整数で提供されるのと同じビット数を使用して可能な最大範囲を計算する際にビット演算子がエラーを生成する理由

ホットタグ

アーカイブ