栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第三章:Java运算符

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第三章:Java运算符

文章目录
  • 一:算数运算符
    • (1)基本算数运算符:`+`、`-`、`*`、``、`%`
    • (2)增量运算符:`+=`、`-=`、`*=`、`=`、`%=`
    • (3)自增自减运算符:`++`、`--`
  • 二:关系运算符:`==` 、`!=` 、`<` 、`>`、 `<=`、 `>=`
  • 三:逻辑运算符:`&&`、`||`、`!`
    • (1)逻辑与:`&&`
    • (2)逻辑或:`||`
    • (3)逻辑非:!
  • 四:位运算符:`&`、`|`、`^`、`~`
  • 五:移位运算符:`<<`、`>>`、`<<<`
  • 六:条件运算符(三目运算符)

运算符就是对操作数进行操作的符号,例如a+b中a和b是操作数,+是运算符。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然后输出
    }
}

二:关系运算符:== 、!= 、< 、>、 <=、 >=
  • 注意区分=和==
  • 关系运算符的结果只有两种可能:true或false
  • 不存在类似于a
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(ab);
        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 

(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
五:移位运算符:<<、>>、<<<
  • 关于移位运算的详细介绍可以查看这篇文章:(计算机组成原理)第二章数据的表示和运算-第二节3:定点数的移位运算(算数移位、逻辑移位和循环移位)
  • 左移<<:最左侧不要,最右侧补0;左移 N N N位,相当于乘以 2 N 2^{N} 2N
  • 右移<<:最右侧不要,最左侧补符号位(正数补0、负数补1);右移 N N N位,相当于除以 2 N 2^{N} 2N
  • 无符号右移>>>:最右侧不要,最左侧补0
public class TestDemo {
    public static void main(String[] args) {
        //左移
        int a = 0x10;
        System.out.printf("%xn", a);
        System.out.printf("%xn", a << 1);
        System.out.println("---------------------------------");

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

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


        //无符号右移
        int d = 0xffffffff;//负数
        System.out.printf("%xn", d);
        System.out.printf("%xn", 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);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号