3

左または右に任意の量だけビット単位のロールを行う推奨される方法はありますか?

たとえば、バイトで - 0x57 rolr 3 = 0xEA.

Z3py ドキュメントで「ロール」操作を見つけられませんでした。各ビットに s を使用することを考えてBitVecいましたが、それは効率的ではないようです/おそらく機能しません。アドバイスをいただければ幸いです。

編集:これまでの回答に感謝します。私は今それを吸うので、これはよりAPIの質問です。ここに私が出発点として持っているものがあります。

def roll(bt):
count = BitVecVal(int('0x03', 16), 8)
s.add(bt == (bt << count | bt >> (8 - count)) & 0xFF)

a = BitVec('a', 8)
s = Solver()
roll(a)
s.add(a == BitVecVal(int('0xEA', 16), 8))
s.check()

これは何も出力せず、モデルは利用できません。

4

1 に答える 1

2

次のように回転できます。

size = 0x100  # size of the bitvector

rotated = (x << n) | (x >> (size - n)) & (size - 1)
于 2012-12-19T15:25:56.327 に答える