2

次の行でエラーが発生します。エラーは再発していませんが、たまにしか発生しません

x,y are huge numbers of 2048 bits
z=bin(x)+bin(y)
z=int(z,2)

ValueError: invalid literal for int() with base 2: '10010101101001011011000000001111001110111110000100101000000011111111100000111010111011101111110010001101101001101000100000001100010011000010100000110100100001010110011111101101000101101001011001100110'
4

4 に答える 4

4

そのエラー メッセージを偽造していませんか?

コード...

>>> int('10010101101001011011000000001111001110111110000100101000000011111111100000111010111011101111110010001101101001101000100000001100010011000010100000110100100001010110011111101101000101101001011001100110', 2)
939350809951131205472627037306557272273273866819979105965670L

...私のために働きます。

そして、あなたのコードの具体例...

>>> x = 82349832
>>> y = 23432984
>>> z = bin(x) + bin(y)
>>> int(z, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '0b1001110100010001111000010000b1011001011000111100011000'

...0bエラー メッセージに問題 (接頭辞など) が表示されます。

解決策は、プレフィックスを削除することです...

z = bin(x)[2:] + bin(y)[2:]
z = int(z, 2)

...または、Martijn Pieters が示唆するように、format()...を使用してプレフィックスなしでバイナリ表現を生成します。

z = format(x, 'b') + format(y, 'b')
z = int(z, 2)

...または、gnibbler が示唆するように、文字列オブジェクトのformat()メソッドを使用して 1 回の呼び出しでそれを行います...

z = '{:b}{:b}'.format(x, y)
z = int(z, 2)
于 2013-05-15T11:36:33.187 に答える
1

binは文字列表現を提供するため、bin( .. ) + bin( .. )2 つの文字列を連結しますが、これは有効な結果ではありません。

>>> bin(0) + bin(1)
'0b00b1'

実際のバイナリ データ (バイナリ データの整数表現の文字列表現ではなく、コードが行うこと) を操作しようとしている場合は、代わりにstructモジュールを使用する必要があります。

于 2013-05-15T11:33:29.763 に答える
0

binは次の形式で文字列を返します。

'0b1100000011001011101000111010110011'

最初に'0b'

したがって、コードでは、これを使用できます(合計xyて整数として):

z=int(bin(x)[2:], 2) + int(bin(y)[2:], 2)

xまたは、正確に最初にandを文字列として連結したい場合y:

z=bin(x)[2:]+bin(y)[2:]
z=int(z,2)
于 2013-05-15T11:36:03.667 に答える