プログラムの数字は、コンピューターメモリにバイナリの形で存在します。ビット操作は、メモリ内の整数（タイプは整数または文字）のバイナリ位置を直接操作することです。
1.奇妙な人形を判断します
n＆1 == 1 // true、次にnは素晴らしい数字です。

2. 2つの番号を交換します
ビット操作を使用して2つの数値を交換する方法では、余分なスペースは必要ありません。aとbの値を以下に交換する場合：

a = a^b; // a = a^b
b = a^b; // b =（a^b）^b = a^0 = a
a = a^b; // a =（a^b）^a = a^a^b = b
3.実装方法を追加、減算、乗算、分割、実現する必要はありません
int add（int num1、int num2）{{
    int a = num1^num2; //進歩がない場合、Aは結果です
    int b = num1＆num2; //位置を記録します。つまり、最高レベル1+1があるかどうか
    b = b << 1; //左の動きを1つの場所に置きます
    if（b == 0）を返します。
    それ以外の場合は、add（a、b）を返します。
}
4.バイナリの1の数
アイデア1：それぞれ（1 << i）とは別に番号nを作成し、結果は1ではありません
アイデア2：n＆（n-1）。n = n＆（n-1）の値を絶えず更新します。各操作は1 1 1になります。
5.ベクトルの適用
位置ベクトルa = [01101001]がコレクションa = {0,3,5,6}を示している場合

場所ベクトルb = [01010101]はコレクションb = {0,2,4,6}を示します

次に、A＆BはABを表し、a | bはa∪bを意味します
程序中的数在计算机内存中都是以二进制的形式存在的，位运算就是直接对整数（类型必须是整数或者字符）在内存中对应的二进制位进行操作。
1.判断奇偶
n&1==1 //true,则n为奇数，否则为偶数

2.交换两个数
使用位运算的方法交换两个数的值不需要额外的空间。如下面交换a和b的值：

a = a^b;  //a = a^b
b = a^b;  //b = (a^b)^b = a^0=a
a = a^b;  //a = (a^b)^a = a^a^b=b 
3.不用加减乘除实现加法运算
int add (int num1, int num2) {
    int a = num1^num2;  //如果无进位，则a就是结果
    int b = num1&num2;  //记录进位，即有没有最高位1+1的情况 
    b = b << 1;         //进位要左移一位
    if (b==0) return a;
    else return add(a,b);
}
4.二进制中1的个数
思路一：使数n分别与(1<<i)做&运算，结果等于0则对应位置不是1
思路二：n&(n-1).不断更新n=n&(n-1)的值，每次操作都会消去低位的一个1，所以当n==0时，停止计数
5.位向量的应用
若 位向量a=[01101001] 表示集合A={0,3,5,6}

位向量b=[01010101] 表示集合B={0,2,4,6}

则 a&b表示A∩B，a|b表示A∪B