2016-08-16 28 views
0

は、私はMinecraftのコードで見つかったコードサンプルを説明するために、ビット単位のANDビットシフト演算上のいくつかの研究をした:ビット演算とビットシフト演算

public static int extractDragMode(int eventButton) 
{ 
    return eventButton >> 2 & 3; 
} 

eventButtonは常に0,1または2ではありませんBitshiftは常に左の部分を0にして0に戻しますか?

+1

あなたが正しい場合は、はいです。私はそう思う。常に0、1、または2に評価されるこの方法ではないと確信していますか?最後に「&3」が与えられれば、それはかなり意味をなさないでしょう。 –

答えて

0

を:電子ビット

はそう場合eventButtonは次のように値を保持します。事は、eventButton自体は興味深いものではないということです。 eventButtonは実際にはいくつかの異なる値が一緒にパックされていると思われます。

ビットマスキングと呼ばれる手法です。イベントボタンは、単一のint内に複数の情報を含みます。この場合、ドラッグモード(メソッド名extractDragModeで判断)に興味があります。これは0,1または2になるドラッグモードです。これは2ビットしか必要とせず、これら2つのビットはintの3番目と4番目のビットです。それらを2ビット右にシフトすることにより、それらを最初の2つの位置に取得します。次に、intの他のすべてのビットを3とゼロにします。私たちが今残しているのは、ドラッグモードビットの値です。

+0

ありがとう!本当に良い説明 – Xerus

2

eventButtonのみ等しい0、1、又は2、[はいビット単位操作は常に返されできれば0

ので、0,1、及び2は、すべての2ビット数、であるビット単位シフトすることによって、それらを

00 >> 2 = 00 
01 >> 2 = 00 
10 >> 2 = 00 

0 & /*any number*/は常に0

0

である基本的には4でeventButtonの値を分割して2つだけ少ないSignificativを得ている:任意の方向に2ビットは常に彼らが0になる場合がありますほぼ確実にあなたが間違っているとeventbuttonが異なる値の多くをすることが可能です...そして、結果は唯一ゼロにすることができ、0,1または2