2016-04-14 9 views
0

私は16bitレジスタを持っています。ビット0の値に
ビット1で0 です... 2値は、ビット3の値で3
ビット4の端部に116bitレジスタから値を取得

だから値SSで1
あります (0 x 1)+(3 x 2)+(1 x 8)+(1 x 16)= 30

これで、値を取得するために逆にしたいと思いますiビット:
(30 &1)/ 1 = 0
(30 & 2)/ 2 = 1(これは間違っています私が間違ってやっている3)
(30 & 8)/ 8 = 1
(30 & 16)/ 16 = 1

すべきですか?

答えて

1
(30 & 2)/2 = 1 (this is wrong, it should be 3) 

これは間違っています。 2ビットを取得するには、ビット位置で3をシフトする必要があります。この場合3 << 1 = 6

(30 & 6)/2 = 3 
+0

フムとあなたがandで....と私は同じような状況がありますが、いくつかの値はビット9にも存在する場合、この場合のレジスタの値が1054ビットであります9..10は値2を保持します。 – Josef

+1

ちょうど9ビットだけシフトしました。紙の上にビットを書くとあなたが表示されます。一般的に、位置mにnビットを取得し、 '((1 << n) - 1)<< m」となるようにします –

+0

ありがとうございました。これは私が必要としていたものです。 – Josef