位运算



1.AND按位与(&)【有0则0】
运算规则:0&0=0;0&1=0;1&0=0;1&1=1;

用途:
(1)取出一个数的指定位。指定位&1,其余位&0。

例:设x=11101100,取x的低四位。令x&00001111=00001100

快速幂里, b & 1 得到的是b的二进制最后一位, (因为1的二进制是001, 有0则0嘛)
(2) a & -a 得到此数的二进制最后一位1及其后面的数

2.按位或(|)【有1则1】
运算规则:0|0=0;0|1=1;1|0=1;1|1=1;

用途:

(1)常用来对某些位置1。或上 一个指定位为1,其余位为0的数值即可。

 例:设x=11101100,将x的低四位置1。令x|00001111=11101111

3.XOR异或(^)【同0异1】
运算规则:0 ^ 0=0; 0 ^ 1=1; 1 ^ 0=1; 1^1=0;

用途:

(1)寻找出现次数为奇数的数, 异或同一数两次=原数,即为那个出现次数为奇的数

(2)与0异或,保留原值。与1异或, 翻转.
  例: 0000 ^ 1100= 1100, 和 1111 ^ 1100= 0011

(3)交换两个变量的值 a=a ^ b;b=a ^ b;a=a^b

4:<< (左移运算符)
各二进位全部左移若干位,高位丢弃,低位补0

例:10的二进制是1010
10<<7:1010000000

5:>> (右移运算符)
各二进位全部右移若干位,高位补0
例:10的二进制是1010
10>>7:00000001010
用途:获取一个数x的第i位的二进制数:
int u = x>>i&1;

原文地址:https://www.cnblogs.com/la-la-wanf/p/14476666.html