当前位置:   article > 正文

JAVA常见的六类运算符_增量运算符是什么

增量运算符是什么

目录

1.算数运算符

1.1基本的四则运算(“+”、“-”、“ * ”、“/“、”%”)

1.2增量运算符 (“+=”、“-=”、“*=”、“%=”) 

1.3自增/自减运算符 (“++”、“--”) 

2关系运算符(“==”、“!=”、“<”、“>”、“<=”、“>=”)

3逻辑运算符(重点)(“&&”、“||”  、“!”)

3.1.1逻辑与 &&

3.1.2逻辑或 ||

3.1.3逻辑非!

4 位运算符(“&”、“|”、“~”、“^”)

4.1.1按位与" & "

4.1.2按位或" | "

4.1.3按位取反" ~ "     

4.1.4异或" ^ "   

5 移位运算(“<<”、“>>”、“>>>”)

5.1.1左移运算符<<

5.1.2右移运算符>>

5.1.3无符号右移运算符>>

6 条件运算符

运算符的优先级:

运算符的结合性:

技巧:如果记不清这些优先级的话,直接使用()去改变优先级。


2022_01_25学习运算符

什么是运算符?
        就拿咋们常说的加号“+”,减号 “-”来说,他们就是运算符。“+”就是进行加法运算的符号,“-”就是进行减法运算的符号。运算符就是进行运算的符号

运算符是干什么的?
        那继续举例呗,“+”是干嘛的,就是进行数字相加的呗,“-”是干嘛的,就是进行数字相减的呗。那“>”是进行干嘛的,进行数字比较的呗。总结下来,运算符就是对操作数进行操作的。


常见运算符

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

1.算数运算符

1.1基本的四则运算(“+”、“-”、“ * ”、“/“、”%”)

        1.1.1.这些都是二元运算符,所谓二元运算符,就是需要两个操作数才能进行操作。
        1.1.2.使用过程中要注意自动类型转换
        1.1.3使用过程中的坑!:
                “/”除法运算
:int/int-->结果还是int类型,因为运算过程中没有double类型的数据,所  以 不会自动类型转化,并且还是向下取整。例如:5/2-->结果是2。同样的如果是double和int进行除法,那结果肯定会转为double类型。例如:5.0/2-->结果是2.5
             
  “%”取余运算:(求模运算):取余运算是干什么的?当然是取余数的喽。
注意:1.java中浮点数、整数都可以取余数,而在c语言中只允许整数取余数!
           2.无论是c语言还是java都不允许 分母为0的情况,也就是 1/0 或者1%0


1.2增量运算符 (“+=”、“-=”、“*=”、“%=”)
 举个例子就能明白:

  1. int a = 1;
  2. //给a加个2
  3. a = a + 2;
  4. //等价写法:
  5. a += 2;

  会遇到的坑!!!:

  1. short a = 10;
  2. a = a + 1;//会报错 常量1默认是int,无法将高精度值赋给低精度
  3. a += 1; // 正确 系统会自动进行转变

1.3自增/自减运算符 (“++”、“--”)
        举个例子:

  1. 1.后加加(指的是先使用该数字,使用完后加加)
  2. int a = 1;
  3. int b = a++;//先使用a,使用完后加加
  4. System.out.println(b);//结果是1
  5. 2.后减减
  6. int a = 1;
  7. int b = a--;//先使用a,使用完后减1
  8. System.out.println(b);//结果是1
  9. 3.先加加(先给该数字加1,然后使用)
  10. int a = 1;
  11. int b = ++a;//先给a加1,然后使用
  12. System.out.println(b);//结果是2
  13. 4.先减减
  14. int a = 1;
  15. int b = --a;//先给a减1,然后使用
  16. System.out.println(b);//结果是0

2关系运算符(“==”、“!=”、“<”、“>”、“<=”、“>=”)

        c和java的区别:c语言中关表达式的返回值可以用数字表示,0代表假,1代表真。

而在java中,不允许用数字表示,返回值只可能是true或者false。

        举个例子

  1. int a = 1;
  2. int b = 2;
  3. int c = 1;
  4. //java中
  5. System.out.println (a > b);//结果:false
  6. System.out.println (a == c);//结果:true
  7. //c语言中
  8. printf("%d", a > b);//结果:0
  9. printf("%d", a == b);//结果:1

注意:c和java的区别

  1. int a = 10;
  2. //c语言中
  3. if (9 < a < 11)//该写法成立 9<a为真返回11 < 11也为真,所以表达式为真
  4. {
  5. ...
  6. }
  7. //java中
  8. if (9 < a < 11)//该写法不成立,9<a为真返回trueboolean类型和int类型无法进行比较
  9. {
  10. ....
  11. }

3逻辑运算符(重点)(“&&”、“||”  、“!”)

3.1.1逻辑与 &&

规则:表达式1 && 表达式2,当表达式1和表达式2都为true时,该结果返回true,否则返回false。

坑:

表达式1 && 表达式2,当表达式1为false时,整个表达式就会返回flase,不会再去判断表达式2。

  1. 10/0-->会引起by Zero异常(分母不能为0
  2. /10>20true,因此会执行第二个表达式10/0从而引发异常。
  3. System.out.println(10 > 20 && 10 / 0 == 0);
  4. //10<20false,因此该语句就会结束并返回false,并不会去执行10/0,因此不会有异常。
  5. System.out.println(10 < 20 && 10 / 0 == 0); // 打印 true

3.1.2逻辑或 ||

规则:表达式1 || 表达式2,当表达式1和表达式2都为flase时,该结果返回false,否则返回true。

坑:

表达式1 && 表达式2,当表达式1为true时,整个表达式就会返回true,不会再去判断表达式2。


3.1.3逻辑非!

规则:只能用在boolean变量上

  1. //正确用法
  2. boolean flag = ture;
  3. if(!flag)//只能用在boolean类型上
  4. {
  5. ...
  6. }
  7. //错误写法(该写法在c语言中能通过 但是在java中不行)
  8. while(!1)
  9. {
  10. ...
  11. }


4 位运算符(“&”、“|”、“~”、“^”)

4.1.1按位与" & "

  两种用法:
          方法1.将两个二进制数的每一位进行比较,如果两个相同位均为1,则返回1,否则其他为0;

方法1举例:

  1. int a = 5;
  2. int b = 6;
  3. System.out.println (a & b);//结果为4
  4. //a变量的二进制为 0101
  5. //b变量的二进制为 0110
  6. //两者相与------&-------
  7. //结果: 0100--->十进制为4

        方法2:和逻辑与具有同样的功能, 当表达式为boolean返回类型时,表达式1 & 表达式2,当表达式1和表达式2都为true时,该结果返回true,否则返回false。
        逻辑&&和按位&的区别:逻辑与在表达式1为假时,会直接结束语句,返回为flase。而按位与无论表达式1为真为假,都会将语句全部执行。
        方法2举例:

  1. //按位与-->即使表达式1为假,也会执行表达式2(表达式都执行)
  2. System.out.println(10 > 20 & 10 / 0 == 0);//结果:由于表达式2会报异常,无结果
  3. //逻辑与-->表达式1为假,不会执行表达2
  4. System.out.println(10 > 20 && 10 / 0 == 0);//结果:由于表达式1为假,结束语句。输出false

4.1.2按位或" | "

两种用法:
          方法1.将两个二进制数的每一位进行比较,如果两个相同位均为0,则返回0,否则其他为1;

方法1举例:

  1. int a = 5;
  2. int b = 6;
  3. System.out.println (a | b);//结果为7
  4. //a变量的二进制为 0101
  5. //b变量的二进制为 0110
  6. //两者相与------|-------
  7. //结果: 0111--->十进制为7

方法2:和逻辑或具有同样的功能, 当表达式为boolean返回类型时,表达式1 | 表达式2,当表达式1和表达式2都为false时,该结果返回false,否则返回true。
        逻辑&&和按位&的区别:逻辑或在表达式1为真时,会直接结束语句,返回为true。而按位与无论表达式1为真为假,都会将语句全部执行。
        方法2举例:

  1. //按位或
  2. System.out.println(10 < 20 | 10 / 0 == 0);//结果:由于表达式2会报异常,无结果
  3. //逻辑或
  4. System.out.println(10 < 20 || 10 / 0 == 0);//结果:由于表达式1为真,结束语句。输出true

小结:

        1.逻辑与:只要表达式1为false,语句就结束,不会继续执行。
        2.逻辑或:只要表达式1为ture,语句就结束,不会继续执行。
        3.按位与:a.首先会有按位操作。b.也有逻辑与的功能,但是表达式1和2都必须全部执行。
        4.按位或:a.首先会有按位操作。b.也有逻辑或的功能,但是表达式1和2都必须全部执行。


4.1.3按位取反" ~ "
        就是将变量的二进制每一位取反,即0变1,1变0.
 

  1. byte a = 5; // 补码:0000 0101
  2. a = (byte)~a;//取反:1111 1010
  3. System.out.println(a);//结果为-6
  4. 运算过程:1111 1010是补码---->转为原码:1000 0110 也就是-6

4.1.4异或" ^ "
        就是两个二进制数的每一位,如果相同则为0,不同为1。

  1. int a = 1;
  2. int b = 0;
  3. System.out.println(a^a);//最终结果为0
  4. //a^a
  5. //a:0000 0001
  6. //a:0000 0001
  7. //-^-----------
  8. // 0000 0000
  9. System.out.println(a^b);//最终结果为1
  10. //a^b
  11. //a:0000 0001
  12. //a:0000 0000
  13. //-^-----------
  14. // 0000 0001

5 移位运算(“<<”、“>>”、“>>>”)

5.1.1左移运算符<<

        简单来说,就是将最左侧的(最高位)二进制位移除掉,给最右侧(最低位)二进制位补0。左移的效果就是给该数字乘2的n次方(n代表左移的位数)

举例说明:

  1. byte a = 63;//二进制0011 1111
  2. System.out.println(a<<1);//结果126
  3. //0011 1111左移一位:
  4. //(最高位移除一位,最低位补0)--->0111 1110

5.1.2右移运算符>>

        简单来说,就是将最右侧的(最低位)二进制位移除掉,给最左侧(最高位)二进制位补0或1
        如何判断最高位补0补1:看符号位,符号位是1就补1,符号位是0就补0(符号位就是最高位,即最左位)。

5.1.3无符号右移运算符>>

简单来说,就是将最右侧的(最低位)二进制位移除掉,给最左侧(最高位)二进制位补0

右移的效果就是给该数字除2的n次方(n代表右移的位数)

java和c的比较:
        这个时候就想到了c语言,c语言在对“符号类型”(比如int,有正负的数字)右移,最左位也是根据符号位的变化,符号位是1就补1,符号位是0就补0。但是没有“无符号右移>>>”,并不代表c语言不能表示,c语言会使用 unsigned 来代表无符号类型,这样右移的时候最高位都是补0。 


6 条件运算符

         规则:表达式1 ? 表达式2 : 表达式3
来解释解释,如果表达式1为true,则会执行表达式2,否则执行表达式3.

  1. int a = 10;
  2. int b = 20;
  3. //如果a<b为真,则把10赋给c,否则把++b赋给c
  4. int c = (a < b) ? 10 : ++b;
  5. System.out.println(c);//结果:10
  6. //等价写法
  7. if (a < b)
  8. {
  9. c = 10;
  10. }
  11. else
  12. {
  13. c = ++b;
  14. }

运算符的优先级:

        什么是运算符的优先级,举个大家都知道的例子,在数学中我们计算加减乘除的时候是不是先计算乘除后计算加减,这就说明乘除的优先级>加减的优先级。优先级就等于规定了计算的顺序。

运算符的结合性:

结合性分为了左结合性右结合性。
左结合性:左做到右进行运算。
右结合性:从右到左进行运算。

什么时候使用结合性?
        当优先级相同的时候我们就需要使用结合性!那什么时候优先级相同呢?
举个简单的例子

  1. int a = 0;
  2. a = 5*3/4;
  3. //1.首先判断出来 */的优先级相同并且大于=的优先级
  4. //2.*/的优先级相同,那是先执行5*3还是先执行3/4呢?
  5. //3.此时,通过查看,*/是左结合性,也就是先执行5*3之后再/4
  6. //4.执行完后,只剩下=运算了。

技巧:如果记不清这些优先级的话,直接使用()去改变优先级。

3+5*3--->加括号后(3+5)*3.

但是呢,还是建议去多练一练记一记,如果人家的代码就是没有(),那你还不是得去读,所以掌握根本才是最好的!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/290958
推荐阅读
相关标签
  

闽ICP备14008679号