只有整型数才能作位运算 (<< 相当于乘2 >>相当于除2)
如:double a=5;
a=a<<3;//error 必须是整型数才可以位运算
system.out.println(a);
运算符:
x++:先运算,后自增
++x:先自增,后运算
&&:短路与,当前一个条件为false时,后一个条件不运算
&:按位与,当前一个条件为false时,后一个条件也要判断
||:短路或,当前一个条件为true时,后一个条件不运算
|:按位或,当前一个条件为true时,后一个条件也要判断
>>:往右移若干位,左边补符号位
>>>:往右移若干位,左边补0,用于位图移动,不用于数字运算
负数的位运算:(根据补码进行位运算)
如:int a=-33;//-33原码:1....0010 0001 补码:1...1101 1111
a=a>>2;//1...1101 1111右移2位变成1....1111 0111 原码:1...0000 1001
system.out.println(a);//-9
取反:
int a=~10;//根据补码 10补码:00... 0000 1010 ~10:11... 1111 0101 ->原码:10...0000 1011
system.out.println(a);//-11
异或:
两个相同的整数异或结果为0。任意整数与0异或,结果都为本身
如:不使用第三个变量,使a和b中的值交换
int a=10,b=5;
a=a^b;
b=b^a;//b^(a^b)=a^(b^b)=a
a=a^b;//(a^b)^(a^(a^b))=(a^b)^a=b;
数学运算符的优先级高于位运算
如:int a=10;
a+=a-=a*=a;
system.out.println(a);//-80
a*=a ->a1=a*a=100;
a-=a ->a2=a-a1=-90;
a+=a ->a3=a+a2=-80;
条件运算:冒号两边的数据类型要一致,否则低精度自动向高精度转换
如:double x=3.0;
int y=5;
system.out.println(x>y?x:y);//5.0