web-dev-qa-db-ja.com

Pythonの2進数

Python 10進数に変換せずに2進数を加算、減算、比較するにはどうすればよいですか?

62
EkSwaim

Bin()とint()を使用して、バイナリの文字列表現間で変換できます。

>>> bin(88)
'0b1011000'
>>> int('0b1011000', 2)
88
>>> 

>>> a=int('01100000', 2)
>>> b=int('00100110', 2)
>>> bin(a & b)
'0b100000'
>>> bin(a | b)
'0b1100110'
>>> bin(a ^ b)
'0b1000110'
112
John La Rooy

バイナリとは何か混乱していると思います。 2進数と10進数は、数字の単なる異なる表現です。 101 base 2と5 base 10は同じ番号です。加算、減算、および比較の演算は、数値-101 base 2 == 5 base 10で行われ、加算は、どの基底で作業していても同じ論理演算です。python =インタプリタは内部的にバイナリとして物事を保存するかもしれません-あなたがそれを扱う方法に影響を与えません-あなたが整数型を持っている場合は、+、-などを使用してください.

2進数の文字列がある場合は、独自の実装を記述するか、int(binaryString、2)関数を使用して変換する必要があります。

9

ビット演算子について話しているなら、あなたは次のことをしている:

~ Not
^ XOR
| Or
& And

それ以外の場合、2進数は10進数とまったく同じように機能します。これは、数字がどのように見えても数字であるためです。 10進数と2進数の唯一の違いは、データを見ているときのデータの表現方法です。

7
Smashery

2進数、10進数、16進数...基数は数値の読み取りまたは出力の場合にのみ重要であり、2進数の追加は10進数の追加と同じです。表現の問題です。

3
Pierre Bourdon

以下は、以前に投稿された関数の書き直しです。

def addBinary(a, b): # Example: a = '11' + b =' 100' returns as '111'.    
    for ch in a: assert ch in {'0','1'}, 'bad digit: ' + ch    
    for ch in b: assert ch in {'0','1'}, 'bad digit: ' + ch    
    sumx = int(a, 2) + int(b, 2)    
    return bin(sumx)[2:]
0
mastueben