2013-07-21 14 views

答えて

15

発現set >>= 1;1(右シフト演算チェックBitwise Shift Operatorsビット単位>>の自己割り当てられた形態)によってsetの右シフトビットであるset = set >> 1;を意味します。

setがある場合と仮定:

BIT NUMBER 31 n=27  m=17     0 
       ▼ ▼   ▼     ▼ 
set =   0000 1111 1111 1110 0000 0000 0000 0000 

そしてset >> = 1;可変set後なる:ビット数がシフト

BIT NUMBER 31 n=26  m=16     0 
       ▼  ▼   ▼     ▼ 
set =   0000 0111 1111 1111 0000 0000 0000 0000 

お知らせ。

注興味深いポイント:setは論理シフトは、数の符号ビットを保持していないので、この>>操作はlogical shiftunsigned shift)でなければなりませんunsigned longですので。あなたが(下位数に向かって)右にすべてのビットをシフトしているので

さらに、そう1つの右シフトは=分割数は2です。

check this code(ちょうど最後のポイントを証明するために):

int main(){ 
unsigned long set = 268304384UL; 
set >>= 1; 
printf(" set :%lu \n", set); 
set = 268304384UL; 
set /= 2; 
printf(" set :%lu \n", set); 
return 1; 
} 

そして出力:同様

set :134152192 
set :134152192 

(そのが>>/の両方が同じであることを意味しません)あなたは左シフトのためにオペレータ<<=を持っています、他の利用可能なものを確認してくださいBitwise operatorsCompound assignment operators、またセクション:bit expressionssigned/arithmetic shift and unsigned shiftの違いを確認してください。

+0

ありがとうございます – Rotom92

+0

@ Rotom92ようこそRotom :) –

6

この「右シフト」は、1ビット値s。整数のすべてのビットを1つ右に移動すると、バイナリは2のナンバリングシステムであるため、実際には2で割ります。

あなたがバイナリで数12を持っている想像:

1100 = 12 in binary 
110 = 6 in binary (1100 right-shifted) 

あなたは右のあなたが10

3

すべてのバイナリ演算子は=と組み合わせることができます。すべての場合において

dest op= expression 

dest = dest op expression 

と等価である(destは、任意の副作用を持っている場合を除き、彼らは一度だけ行われます)。

これは

set>>=1; 

と等価であることを意味する:

set = set >> 1; 

>>バイナリ右シフト演算子であるので、それは1ビットset右に値をシフトすることを意味します。

関連する問題