はCで、私は、例えば、そのように32ビットの符号なしの値のビット#10をゼロにできます。Pythonでビットを操作するにはどうすればよいですか?
unsigned long value = 0xdeadbeef;
value &= ~(1<<10);
は、私はPythonでいることをどのように行うのですか?
はCで、私は、例えば、そのように32ビットの符号なしの値のビット#10をゼロにできます。Pythonでビットを操作するにはどうすればよいですか?
unsigned long value = 0xdeadbeef;
value &= ~(1<<10);
は、私はPythonでいることをどのように行うのですか?
ビットごとの演算作業もはるかのようなC. &で、| Pythonの^演算子はCのように動作します。〜演算子はCの符号付き整数として機能します。つまり、〜xは-x-1を計算します。
Pythonの整数は固定幅ではないので、左シフトにはいくらか注意する必要があります。ビットマスクを使用して下位ビットを取得します。たとえば、32ビット整数のシフトに相当するdo(x < < 5)& 0xffffffff。
value = 0xdeadbeef
value &= ~(1<<10)
コードをコピーしてPython REPLに貼り付けてみましたか?
>>> value = 0xdeadbeef
>>> value &= ~(1<<10)
>>> hex (value)
'0xdeadbaef'
省略「unsigned long型」、およびセミコロンはどちらか必要とされていません。
value = 0xDEADBEEF
value &= ~(1<<10)
print value
"0x%08X" % value
あなたの例ではないことを除いて、Pythonで文字通り同じであるので、Pythonは、Cスタイルビット操作演算子を持っていますキーワードを入力します。
value = 0xdeadbeef
value &= ~(1 << 10)
Pythonのint型の
多くのビット操作を行う場合(アプリケーションのパフォーマンスよりも可読性を重視する場合)、Integerラッパーを作成してVerilogやVHDLなどのスライシングを有効にすることができます。
import math class BitVector: def __init__(self,val): self._val = val def __setslice__(self,highIndx,lowIndx,newVal): assert math.ceil(math.log(newVal)/math.log(2)) <= (highIndx-lowIndx+1) # clear out bit slice clean_mask = (2**(highIndx+1)-1)^(2**(lowIndx)-1) self._val = self._val^(self._val & clean_mask) # set new value self._val = self._val | (newVal<<lowIndx) def __getslice__(self,highIndx,lowIndx): return (self._val>>lowIndx)&(2L**(highIndx-lowIndx+1)-1) b = BitVector(0) b[3:0] = 0xD b[7:4] = 0xE b[11:8] = 0xA b[15:12] = 0xD for i in xrange(0,16,4): print '%X'%b[i+3:i]
出力:
D E A D
また、ビットのシーケンスを扱うための素晴らしいインターフェースである、BitArrayをチェックアウトする必要があります。
a = int('00001111', 2)
b = int('11110000', 2)
bin(a & b)[2:].zfill(8)
bin(a | b)[2:].zfill(8)
bin(a << 2)[2:].zfill(8)
bin(a >> 2)[2:].zfill(8)
bin(a^b)[2:].zfill(8)
int(bin(a | b)[2:].zfill(8), 2)