1

だから私はt = 111を持っています

bin(1111)
Out[105]: '0b10001010111'

g = bin(111)

g
Out[16]: '0b1101111'

私の質問は、引用符を取り除くためにそこにいるということです。私はそれに対して算術演算を実行することに関心があります。

反復における g = g -0b1 など。

アップデート

たとえば、 g = bin(111)[2:] を '1101111' ではなく 1101111 にしたかっただけです。

とにかく、2進数を取り込んでそれを操作する代わりに、非常に簡単な回避策を実行しました。

    length = len(string) #what is the len of this string
    t = startrange #Equivalent to binary string, i.e. for 111 it is 7
    for i in range(int(startrange)):
        t -= 1
        l=tuple((bin(t)[2:].zfill(length)))

PS: しかし、繰り返し bin() のように変換は毎回行われます。それは深刻なパフォーマンスの問題ではありません。

4

5 に答える 5

3

数値を文字列に変換する場合にのみ使用binします。

任意の整数は、コンピューター内で既にビットであるため、算術演算を実行するために「変換」する必要はありません。

整数値で計算を行い、結果を出力にのみ必要な形式に変換します。

于 2013-05-23T15:24:29.087 に答える
2

あなたが何を求めているのか、何をしているのかはあまり意味がありません。このbin関数は文字列を返すため、常に引用符が「含まれる」ことになります。数値で算術演算を行いたい場合は、それを数値として使用する必要があります( を呼び出す前に既にアクセスできますbin)。計算が完了したら、 を使用binして結果をバイナリでフォーマットできます。

マシンが通常行っているバイナリ計算を手動で実行しようとしている場合を除きます。次に、次のようなことができます。

number = 111
bits = [int(b) for b in bin(number)[2:]] # get a list of "bits"
print(bits) # Prints [1, 1, 0, 1, 1, 1, 1]

その後、ビット操作を手動で行うことができると思います。

Jon Clementsが言及しているように編集mapすると、使用していた関数の代わりにformat関数('b'バイナリ形式仕様のフォーマット)を使用して、これをもう少しきれいに行うことができます。bin

number = 111
bits = map(int, format(number, 'b')) # get a list of "bits"
print(bits) # Prints [1, 1, 0, 1, 1, 1, 1]
于 2013-05-23T15:25:24.890 に答える
0

印刷するだけです:

>>> print bin(1111)
0b10001010111

実際にはそこに引用符はありません。それは、あなたを「助ける」ためにそれらを出力に添付するPythonの「シェル」です

于 2013-05-23T15:23:44.477 に答える
0

バイナリ文字列に移動し、それを使用して計算を行う必要がある場合は、次のようにします。

binary_string = bin(111)

num_to_calc_with = int(binary_string, base=2)
于 2013-05-23T15:26:00.227 に答える
-2

人々が言っ​​たように、実際にはこれを行う必要はまったくありませんが、それが必要な場合は、次のようにして2進数を整数として取得できます。

int(bin(111)[2::])
于 2013-05-23T15:26:49.780 に答える