java运算符可以分为如下几种:
-
算数运算符
-
赋值运算符
-
比较运算符
-
逻辑运算符
-
位运算符
-
类型相关运算符
几种类型中的几个运算符:
1、除法运算符 /
除法运算符有些特殊,如果参与运算的是两个都是整形的,则除数不可以是0,否则将会引发除以零异常;但如果两个运算数有一个是浮点数,或两个都是,则计算结果也是浮点数;此时允许除数是0,或者0.0,得到结果是正无穷大或负无穷大。代码如下:
doublea=5.2; //除法运算的验证
doubleb=3.4;
doublediv=a/b;
System.out.println(div);
System.out.println("5除以0.0的结果是:"+5/0.0);//输出正无穷大:Infinity
System.out.println("-5除以0.0的结果是:"+-5/0.0);//输出负无穷大:-Infinity
System.out.println("5除以0的结果是:"+-5/0);//此句将出现异常
运行结果:
2、求余运算符 %
求余的运算结果不一定总是整数;如果求余运算的两个操作数中有一个或者两个是浮点数,则允许第二个操作数是0或0.0,只是求余运算的结果是非数:
NaN。代码如下:
double a1=4.3; double a2=8.43; double mod=a1%a2; System.out.println(mod); System.out.println("5对0.0求余的结果是:"+5%0.0);//结果为非数NaN; System.out.println("-5.0对0求余的结果是:"+-5.0%0);//结果为非数NaN; System.out.println("0对5.0求余的结果是:"+0%5.0);//结果为0; System.out.println("0对0.0求余的结果是:"+5%0.0);//结果为非数NaN; System.out.println("-5对8求余的结果是:"+-5%8);// System.out.println("-5对0求余的结果是:"+-5%0);//出现异常
|
运行结果如下:
4、按位取反 ~
负整数的按位取反:因为负整数在计算机里以补码形式存在,所以对负数取反的时候应注意用其补码取反!代码如下:
System.out.println("-10按位取反的结果是:"+~-10);
System.out.println("10按位取反的结果是:"+~10);
运行结果:
5、左移运算符 <<
左移运算符是将运算数的二进制码整体左移指定位数,左移后右边空出来的为以0来填充,例如如下代码:
System.out.println("3左移4位的结果是:"+(3 << 4));
System.out.println("-3左移4位的结果是:"+(-3 << 4));
运行结果:
6、右移运算符 >>(右移运算符)、 >>>(无符号右移运算符)
Java的右移运算符有两个:>>和>>>,对于>>运算符而言, 把第一个操作数的二进制码右移指定位数后,左边空出来的位以原来的符号位来填充。即如果第一个操作数原来是正数,则左边补0,若是负数,则补1;>>>是无符号右移运算符,它把第一个操作数的二进制码右移指定位数后,左边空出来的位总是以0来填充。代码如下:
System.out.println("-8右移2位的结果为:"+(-8>>2));
System.out.println("8右移2位的结果为:"+(8>>2));
System.out.println("-8无符号右移2位的结果为:"+(-8>>>2));
System.out.println("8无符号右移2位的结果为:"+(8>>>2));
运行结果:
注意:
>>、>>>和<<三个移位运算符并不是适合所有的数值类型,它们值适合对byte、
short、char、int和long等整型进行运算。除此之外,进行移位运算时还有如下的规则:
-
对于低于int类型(如byte、short、和char)的操作数总是先自动类型转换为int类型后再移位。
-
对于int类型的整数移位a>>b,当b>32,系统先用b对32求余(因为int类型只有32位),得到的结果才是真正的移位位数。例如a>>33和a>>1的结果完全一样,而a>>32的结果和a相同。
-
对于long型的整数移位时a>>b,当b>64,总是先用b对64求余(long类型是64位)得到的结果才是真正的移位位数。
代码如下:
int a=21;
long b=3;
System.out.println("a="+a);
System.out.println("a右移32位的结果为:"+(a>>32));
System.out.println("a右移1位的结果为:"+(a>>1));
System.out.println("a右移33位的结果为:"+(a>>33));
System.out.println("b="+b);
System.out.println("b左移64位的结果为:"+(b<<64));
System.out.println("b左移2位的结果为:"+(b<<2));
System.out.println("b左移66位的结果为:"+(b<<66));
运行结果: