//位运算符:<<(左移) >>(右移) >>>(无符号右移) & | ^(异或) ~(反码)
class Operate4
{
public static void main(String[] args)
{
System.out.println(6&3);//110&011=010=2;1是有效位,将有效位进行运算;
System.out.println(6|3);//110|011=111=7;1是有效位,将有效位保留;
System.out.println(6^3);//110|011=101=5;1是有效位,将有效位进行计算;
/* 一个数异或同一个数2次,结果还是这个数;可以用于加密运算;
将一个数进行异或就相当于加密了,在通过异或同样的数就可以解密了~
银行的秘钥就是该技术
算法:一个数通过一系列的计算之后得到另一个数;
*/
// ~反码:取反运算
System.out.println(~6); //开发几乎用不上;
/* 位移运算:
左移几位其实就是该数据乘以2的几次方;
<<:可以完成2的次幂运算。
右移几位其实就是该数据除以2的几次方;
>>:对于高位出现的空位,原来高位是什么,就用什么补,保证符号位存在,未改变符号;
>>>:无符号右移
对于高位出现的空位,无论原来高位是什么,空位都用0补;
进行除2次幂运算时,用>>;
*/
System.out.println(3<<2);//3往左移2位;0000-00000000-00000000-00000000-0011变成00……1100=12;
System.out.println(3<<4);//3*(2的4次方)= 3*16 = 48
System.out.println(6>>1);//6往右移1位;0000-00000000-00000000-00000000-1100变成00……0110=3;
System.out.println(6<<2);//6/(2的2次方)= 6*4 = 1(小数点省略);
// 练习
// 2乘以8的等于几?(最有效率的方式)
System.out.println(2<<3);
// 对2个整数变量的值进行互换;
int a = 3, b = 5;
System.out.println("a="+a+",b="+b);
//使用第三方变量
//正常编程开发的时候使用,阅读性最好;
/*int c;
c = b; b = a; a = c;
System.out.println("a="+a+",b="+b);
*/
//不使用第三方变量,这种方式不要用,如果两个整数的数值过大,会超出int范围,会强制转换,数据会变化;
/*a = a + b;//a = 3 + 5;
b = a - b;//b = 8 - 5 =3;
a = a - b;//a = 8 - 3 =5;
System.out.println("a="+a+",b="+b);//连接符+的使用,别忘了啊~
*/
//不使用第三方变量,使用异或运算
//缺点:阅读性差,面试的时候可以用
a = a ^ b;//a = 3 ^ 5;
b = a ^ b;//b = (3^5)^5;b=3;
a = a ^ b;//a = (3^5)^3;a=5;
System.out.println("a="+a+",b="+b);
}
}