程序中的数在计算机内存中都是以二进制的形式存在的，位运算就是直接对整数（类型必须是整数或者字符）在内存中对应的二进制位进行操作。
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
ตัวเลขในโปรแกรมทั้งหมดอยู่ในรูปแบบไบนารี่ในหน่วยความจำคอมพิวเตอร์ การดำเนินการ Bit จะต้องดำเนินการโดยตรงกับไบนารีบิตที่สอดคล้องกันของจำนวนเต็ม (ชนิดต้องเป็นจำนวนเต็มหรืออักขระ) ในหน่วยความจำ 1. กำหนดความเท่าเทียมกัน n&1==1 //true จากนั้น n จะเป็นเลขคี่ มิฉะนั้นจะเป็นเลขคู่ 2 แลกเปลี่ยนตัวเลขสองตัวโดยใช้การดำเนินการบิตเพื่อแลกเปลี่ยนค่าของตัวเลขสองตัวโดยไม่มีช่องว่างเพิ่มเติม แลกเปลี่ยนค่าของ a และ b ดังนี้: a = a^b; //a = a^bb = a^b; //b = (a^b)^b = a^0=aa = 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; //การพกพาต้องถูกเลื่อน ไปทางซ้ายหนึ่งตำแหน่งถ้า (b==0) ส่งคืน a; else return add(a,b); } 4. จำนวน 1 ในไบนารี่ แนวคิดที่ 1: ทำให้ตัวเลข n ดำเนินการและดำเนินการด้วย (1<<i ) ตามลำดับ หากผลลัพธ์เท่ากับ 0 ตำแหน่งที่สอดคล้องกันจะไม่ใช่ 1 แนวคิดที่ 2: n&(n- 1) อัปเดตค่าของ n=n&(n-1 อย่างต่อเนื่อง) การดำเนินการแต่ละครั้งจะกำจัดลำดับที่ต่ำ 1 ดังนั้น เมื่อ n==0 ให้หยุดนับ 5. การประยุกต์เวกเตอร์บิต ถ้า bit vector a=[01101001] แสดงถึงเซต A={0,3,5,6} bit vector b=[01010101] แสดงถึงเซต B={0,2,4,6} จากนั้น a&b แทน A∩B, a|b แทน A∪B
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence