C/C++のビット操作

1277 ワード

一、位の概念
コンピュータでは、1バイトが8ビット(現在の一部のコンピュータでも16ビット)、つまり00000000-1111111を占めています.位は中の0と1です. char c=100; 実はcは01100100で、ちょうど0 x 64です.そのうち高位は前、低位は後である.いくつかのコンピュータの上で点が大きくて後で0 x 46として保存します
 
二位演算子:
&と、|または、~非、^異或、<<左シフト、>>右シフト&=自己と、|=自己または、~=自己非、^=自己異または例えば:b=a<<3;すなわち、aの値は2ビット左にシフトし、bに付与される.a自体の値は変わっていない.b=a*8に等しい. int num; if (num & 1 == 1);//最下位が1 num>>=1であるか否かを判断する. num = num >> 1;//num 1桁右シフト
 
三、よくある操作
numの5位(最小は0位)に1、または0、または1であるか否かを判断する
1.第1の動作num|=(1<<5);//numの5番目の位置1を与える.1または=1のためです.0または=と変わらないnum&=~(1<<5);//numの5番目の位置0を与えます.0と=0だからです.1と=不変num^=(1<<5);//num 5位に逆を取る;和1异或=1,和0异或=不変num&(1<<5)/=0は第5位が0であることを示す!=0は5位が1 num>>5&1//numを得る5位を表す.
#define bit_set(num, pos) (num |= (1<<pos))  // num pos  1
#define bit_clr(num, pos) (num &= !(1<<pos)) // num pos 0
#define bit_rev(num, pos) (num ^= (1<<pos)) // num pos
#define bit_que(num, pos) (num & (1<<pos)) // num pos 0;!=0 1
#define bit_get(num, pos) (num >> pos & 1) // num pos