私はカーネルのシステムコールでこれを見つけたが、私は理解していないこの ">> ="演算子はCの意味ですか?
unsigned long set;
/*set is after modified*/
set >>= 1;
、どのように動作しますか?
私はカーネルのシステムコールでこれを見つけたが、私は理解していないこの ">> ="演算子はCの意味ですか?
unsigned long set;
/*set is after modified*/
set >>= 1;
、どのように動作しますか?
発現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 shift(unsigned 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 operatorsとCompound assignment operators、またセクション:bit expressionsとsigned/arithmetic shift and unsigned shiftの違いを確認してください。
この「右シフト」は、1ビット値s。整数のすべてのビットを1つ右に移動すると、バイナリは2のナンバリングシステムであるため、実際には2で割ります。
あなたがバイナリで数12を持っている想像:
1100 = 12 in binary
110 = 6 in binary (1100 right-shifted)
あなたは右のあなたが10
これで割ることになる1によってベース-10番号の桁の全てを動かしているかのようにビットシフトの詳細については、http://msdn.microsoft.com/en-us/library/f96c63ed(v=vs.80).aspx
上記のコマンドは、1ビット右シフトを実行します。このリンクからのビット単位の操作を参照してください。http://www.cprogramming.com/tutorial/bitwise_operators.html
すべてのバイナリ演算子は=
と組み合わせることができます。すべての場合において
dest op= expression
dest = dest op expression
と等価である(dest
は、任意の副作用を持っている場合を除き、彼らは一度だけ行われます)。
これは
set>>=1;
と等価であることを意味する:
set = set >> 1;
>>
バイナリ右シフト演算子であるので、それは1ビットset
右に値をシフトすることを意味します。
ありがとうございます – Rotom92
@ Rotom92ようこそRotom :) –