位运算基础知识

位操作有按位与(&)、或(|)、非(~)、异或(^)、左移n位(<< n)、右移n位(>> n)等操作。

java中的“>>>”运算符将用“0”填充高位,“>>”用符号位填充高位,没有“<<<”运算符。左移操作“<< ”,高位移出,空位补零。


java中对移位运算右侧的参数要做相应的取模处理,比如int类型的数1有32位,那么"1 << 35" == "1 << 3",效果相同,值为8;

在移位运算时,byte、short和char类型移位后的结果会变成int类型,

进行位操作时,不用再考虑原有类型的数值,只按位运算的规则来操作即可。


清0操作:和0”与“;

置1操作:和1“或”;

取出某位:和1”与“   或者   和0“或”;


非操作“~”:将数的所有位按位取反,“0”变为“1”,“1”变为“0”;


XOR--异或运算:

     相同为“0”,不同为“1”,也可用 [不进位加法] 来理解。

异或操作的一些特点:

x^0=x;
x^x=0;
x^(~0)=~x//~0 == 1s,表示所有位全为”1“;
x^(~x)=1s//1s表示所有位均为“1“;
异或操作满足乘法交换律和结合律:
那么,
a^a^b == a^b^a;
a^b=c可推出 a^c=b,b^c=a//swap


移位操作:

移位操作可看做乘以/除以2的幂。
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。 

1.将 x 最右边的n位清零:  x & (~0 << n);

2. 获取 x 的第n位的值: x & (1 << n);

3.将 x 第n位置为 1 : x | (1 << n);

4.将 x 第n位清 0 : x & ( ~(1<< n) );

5.将 x 的最高位至第 n 位 (含)清零:x& ( (1<

6.将 x 的第 n 位至第 0 位 (含)清零:x&( (~(1<<(n+1)  - 1) );

8.将 x 第n位更新为写入值v(v取0或1): mask=v<



你可能感兴趣的:(位运算)