侧边栏壁纸
博主头像
快乐江湖的博客博主等级

更多内容请点击CSDN关注“快乐江湖”

  • 累计撰写 127 篇文章
  • 累计创建 33 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

第三章:Java运算符

快乐江湖
2023-01-29 / 0 评论 / 0 点赞 / 12 阅读 / 21355 字

运算符就是对操作数进行操作的符号,例如a+bab是操作数,+是运算符。Java中运算符和C语言中的运算符基本一致(当然也有自己的特点)。运算符主要有以下几类

  • 算数运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 移位运算符
  • 条件运算符

一:算数运算符

(1)基本算数运算符:+-*\%

  • 它们都是二元运算符,也即运算时需要左右两个操作数

①:两个int相除时结果仍为int,同时还会向下取整,这一点很多人容易犯错

public class TestDemo {
    public static void main(String[] args) {
        int a = 3;
        int b = 2;
        System.out.println(a / b);//实际输出1,舍弃小数位

    }
}

在这里插入图片描述

②:当两侧操作数类型不一致时,会向类型大的提升,这里尤其注意/

public class TestDemo {
    public static void main(String[] args) {
        // 类型提升
        System.out.println(1+0.2);//1已经被提升为了double,输出1.2

        //注意/运算符
        System.out.println(5/2);//输出2
        System.out.println((float)5/2);//输出2.5
        System.out.println(5/(float)2);//输出2.5
        System.out.println((float)(5/2));//输出2.0
    }
}

③:\%运算时,右操作数不能为0

  • 在数学中叫做除数不能为0
  • 程序运行后会抛出异常
public class TestDemo {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        System.out.println(a / b);

    }
}

在这里插入图片描述

④:%也可以操作负数

public class TestDemo {
    public static void main(String[] args) {
        System.out.println(10 % 3);
        System.out.println(10 % -3);
        System.out.println(-10 % 3);
        System.out.println(-10 % -3);
    }
}

在这里插入图片描述

(2)增量运算符:+=-=*=\=%=

  • 这一部分和C语言一致
  • 注意:增量运算符具有自动类型转换的功能
public class TestDemo {
    public static void main(String[] args) {
        int a = 1;
        a+=2; //相当于a=a+2
        System.out.println(a);

        int b = 1;
        b-=2; //相当于b=b-2
        System.out.println(b);

        int c = 1;
        c*=2; //相当于c=c*2
        System.out.println(c);

        int d = 1;
        d/=2; //相当于d=d/2
        System.out.println(d);

        int e = 3;
        e%=2; //相当于e=e%2
        System.out.println(e);
    }
}

在这里插入图片描述

(3)自增自减运算符:++--

  • 如果单独使用,那么【前置++】和【后置++】无任何区别
  • 如果混合使用,那么【前置++】是先+1然后再使用变量+1之后的值,【后置++】则相反
public class TestDemo {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a++);//先使用故输出1,然后a变为2
        System.out.println(++a);//先++变为3然后输出
    }
}

在这里插入图片描述

二:关系运算符:==!=<><=>=

  • 注意区分===
  • 关系运算符的结果只有两种可能truefalse
  • 不存在类似于a<b<c这样的操作
public class TestDemo {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a==b);
        System.out.println(a!=b);
        System.out.println(a<b);
        System.out.println(a>b);
        System.out.println(a<=b);
        System.out.println(a>=b);
    }
}

在这里插入图片描述

三:逻辑运算符:&&||

(1)逻辑与:&&

  • &&左右两侧必须都是boolean类型

  • 规则为:遇假则假、全真则真
    在这里插入图片描述

  • 运算时从左到右依次判断,一旦某个表达式为false,则结果直接返回false,后续表达式不再执行(“短路”现象)

public class TestDemo {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a == 1 && b == 2);
        System.out.println(a == 1 && b > 100);
        System.out.println(a > 100 && b == 2);
        System.out.println(a > 100 && b > 100);

    }
}

在这里插入图片描述

短路现象

public class TestDemo {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(((a > b) && ((19 / 0) == 0))); //a>b返回false,直接返回false,虽然后面除数为0,但是不执行
    }
}

在这里插入图片描述

(2)逻辑或:||

  • ||左右两侧必须都是boolean类型
  • 规则为:遇真则真、全假则假
    在这里插入图片描述
  • 运算时从左到右依次判断,一旦某个表达式为true,则结果直接返回true,后续表达式不再执行(“短路”现象)
public class TestDemo {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a == 1 || b == 2);
        System.out.println(a == 1 || b > 100);
        System.out.println(a > 100 || b == 2);
        System.out.println(a > 100 || b > 100);

    }
}

在这里插入图片描述

短路现象

public class TestDemo {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(((a < b) || ((19 / 0) == 0))); //a<b返回true,直接返回true,虽然后面除数为0,但是不执行
    }
}

在这里插入图片描述

(3)逻辑非:!

  • !后面只能接布尔表达式,而不能像C语言一样出现类似于!1!0的操作
  • 规则为:真变假、假变真
    在这里插入图片描述
public class TestDemo {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(!(a == 1)); // a == 1 为true,取个非就是false
        System.out.println(!(a != 1)); // a != 1 为false,取个非就是true

    }
}

在这里插入图片描述

四:位运算符:&|^~

关于位运算符这里就不详细展开了,只说一下具体规则。位运算符会针对比特位进行运算

  • 按位与(&:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
  • 按位或(|:如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
  • 按位异或(^:如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
  • 按位取反(^:如果该位为 0 则转为 1, 如果该位为 1 则转为 0

五:移位运算符:<<>><<<

public class TestDemo {
    public static void main(String[] args) {
        //左移
        int a = 0x10;
        System.out.printf("%x\n", a);
        System.out.printf("%x\n", a << 1);
        System.out.println("---------------------------------");

        //右移
        int b = 0x10;//正数
        System.out.printf("%x\n", b);
        System.out.printf("%x\n", b >> 1);

        int c = 0xffff0000;//负数
        System.out.printf("%x\n", c);
        System.out.printf("%x\n", c >> 1);
        System.out.println("---------------------------------");


        //无符号右移
        int d = 0xffffffff;//负数
        System.out.printf("%x\n", d);
        System.out.printf("%x\n", d >>> 1);
    }
}

在这里插入图片描述

六:条件运算符(三目运算符)

  • 格式为:表达式1?表达式2:表达式3
public class TestDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int max = a>b?a:b;
        System.out.println(max);
    }
}

在这里插入图片描述

0

评论区