运算符

运算符可以以用来表示数据的运算、赋值、和比较等。Java语言使用运算符将一个或多个操作数连缀成执行性语句,用于实现特定功能。其中运算符可分为如下几种。

  • 算数运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符
  • 类型相关运算符

算术运算符

算数运算符用于执行基本的数学运算:加、减、乘、除和求余等。

除法运算符(/)

  • 如果除法运算符的两个操作数都是整数类型,则计算结果也是整数。
  • 如果除法运算符的两个操作数都是整数类型,则除数不可以为0,否则引发异常
  • 但如果除法运算符的连个操作数有一个是浮点数,或者两个都是,则计算结果也是浮点数,此时允许除数为0,或者0.0.得到的结果为正无穷大(Infinity)或负无穷大(-Infinity)

求余运算符(%)

  • 求余运算(a % b)是计算b的多少倍刚刚好可以容入a,返回多出来的那部分(余数)
  • 求余运算的结果不一定总是总数,它的计算结果是使用第一个操作数除以第二个操作数,得到一个整数的结果后剩下的值就是余数,
  • 为了得到a % b的结果,%计算了以下等式,并输出余数作为结果:a = (b × 倍数) + 余数

自加(++)

  • 自加是单目运算符,只能操作一个数
  • 自加运算符只能操作单个数值型(整型、浮点等)的变量,不能操作常量或表达式
  • 自加运算符可以出现在操作数的左边,也可以右边。但是效果不同,左边则先把操作数加1,然后在进行运算;右边则先把操作数运算,再进行加1
public class ModTest{
    public static void main(String[] args) {
        var a = 5;
        //先让a执行算数运算,之后自加
        var b = a++ + 6;
        //输出a的值为6,b的值为11
        System.out.println(a + "\n" + b);
        var c = 5;
        //先让a执行算数运算,之后自加
        var d = ++c + 6;
        //输出a的值为6,b的值为11
        System.out.println(c + "\n" + d);

    }
}

其他运算

其他比较复杂的数学运算可以借助java.lang.Math类完成

public class MathTest {
    public static void main(String[] args) {
        var a = 3.2;
        //求a的5次方,并将计算结果赋给b
        double b = Math.pow(a,5);
        System.out.println(b);
        //求a的平方根,赋值给C
        double c = Math.sqrt(a);
        System.out.println(c);
        //计算随机数,返回一个0~1之间的伪随机数
        double d = Math.random();
        System.out.println(d);
        //求1.57的sin函数值;1.57为弧度值
        double e = Math.sin(1.57);
        System.out.println(e);
    }
    
}

位运算符

位运算符分别有:

  • &:按位与。当两位同时为1时才返回1。
  • |:按位或。只要有一位为1即可返回1
  • ~:按位非。单目运算符,将操作数的每个位(包括符号位)全部取反。
  • ^:按位异或。当两位相同时返回0,不同时返回1。
  • <<:左移运算符。
  • >>:右移运算符。
  • >>>:无符号右移运算符

按位非只需要一个操作数,是将操作数在计算机底层的二进制按位取反。

System.out.println(5 & 9); //按位与,将输出1
System.out.println(5 | 9); //按位或,将输出13

5的二进制码是00000101,而9的二进制是00001001。原理如下:

00000101 & 00001001

00000101
00001001
--------
00000001 //按位与

00000101
00001001
--------
00001101 //按位或
System.out.println(~-5); //按位非,将输出4
System.out.println(5 ^ 9); //将输出12

其中需要注意的是,java中的负数的二进制,是以1开头作为符号位,是以补码的方式存在的,补码是由原码除符号位以外取反得到反码,之后将反码加一得到补码,其中正数的补码与原码一致。
yunsua.jpg

逻辑运算符

  • &&:与,前后两个操作数必须都是true才返回true,否则返回false。
  • &:不短路与,作用与&&相同
  • ||:或,只要两个操作数中有一个为true,就可以返回true,否则返回false
  • |:不短路或,作用于||相同。
  • !:非,只需要一个操作数,如果操作数为true,则返回false;反之返回true
  • ^:异或,当操作数不同时才返回true,相同则返回false

三目运算符

所谓三目运算符是指类似 b ? x : y ,大部分时候三目运算符都是if else的精简写法

public class Main {
    public static void main(String[] args) {
        int n = -100;
        int x = n >= 0 ? n : -n;
        System.out.println(x);
    }
}
//if else写法
public class Main {
    public static void main(String[] args) {
        int n = -100;
        if (n >= 0)
        {
            System.out.println(n);       
        }
        else
        {
            System.out.println(-n);
        }
    }
}

上述语句的意思是,判断n >= 0是否成立,如果为true,则返回n,否则返回-n。这实际上是一个求绝对值的表达式。

注意到三元运算b ? x : y会首先计算b,如果b为true,则只计算x,否则,只计算y。此外,x和y的类型必须相同,因为返回值不是boolean,而是x和y之一。

最后修改:2021 年 06 月 20 日 11 : 16 AM
如果觉得我的文章对你有用,请随意赞赏