Java运算符

表达式与运算符

表达式
  • 表达式由运算符和操作数组成,根据运算符也可分为单目表达式、双目表达式、三目表达式
  • 计算:表达式的结果是以最大类型的操作数为标准,其他小类型自动转换成最大类型然后进行运算。
  • 例如:int a,b = 3; double c = 3.5; double d = a + b + c; //结果为double类型
  • 注意:这些都是表达式 -> 5、num1、num1 + num2、sum = num1 + num2
运算符

主要包含算术运算符, 赋值运算符, 关系运算符, 逻辑运算符, 条件运算符, 位运算符

Java运算符_第1张图片

算术运算符

  • 算术运算符主要用于基本的算术运算,如加减乘除等
  • 包括:加(+) 减(-) 乘(*) 除(/) 取模(%) 自加(++) 自减(--)
  • +的用法:a.加号;b.正号; c.字符串连接符,如:""+10+5 //105
  • 除法:两个int相除结果为整型,13/5 -> 2 、13.0/5 -> 2.6
  • 取模:13%5 -> 3 、13.5/5 -> 3.5
Java运算符_第2张图片
自增自减运算符

x++ 是先赋值后自增,x-- 同理;++x 是先自增后赋值,--x 同理
示例:int x = 4; int y = (x++)+5; //y的结果为9,x先进行加法然后赋值,最后在自增

Java运算符_第3张图片

赋值运算符

格式:变量 = 表达式;
注意:赋值运算符是从右往左运算,赋值运算符的左边不能是常量
例如:int n = 5; //将5赋值给变量n int m = n; //将变量n的值赋值给变量m

复合赋值运算符
Java运算符_第4张图片

关系运算符

  • 比较运算符用于判断两个数据的大小,主要用于条件和循环语句中的判断条件
  • 包括:==、!=、>、<、>=、<=,运算结果为boolean值,即true或者false
  • 'A' > 'B' 结果为false,比较的是两个字符的ASCII值
    true == false 结果为false,两个布尔值不相等
    float f = 5.0f; long l = 5; f==l; 结果为true,浮点数与整数比较,只要值相等就为true
Java运算符_第5张图片

逻辑运算符

  • 逻辑运算符用来连接一个或多个条件,判断这些条件是否成立
  • 包括:AND(&&)、OR(||)、NOT(!)、异或(^)、& 、|
  • 运算结果为boolean值,即true或者false
  • 注意:逻辑运算符的操作数operator都是布尔类型的
  • 逻辑"与"运算符,必须左右两个条件都为true才为true
  • 逻辑"或"运算符,左右任一条件为true则为true
  • 逻辑"非"运算符,对原条件进行取反,操作数为true结果为false,操作数为false结果为true
Java运算符_第6张图片

区分&& 与 &:
&&运算符又叫短路运算符,如果第一个表达式的值就能决定表达式最后的结果,运算符右边的表达式就不再计算了,而&则都会计算。同理 || 叫做短路或,a || b 一旦a为true则b不在进行判断,而 | 都要进行判断。
例如:
int n = 3; boolean b=(3 > 7)&&((n++)<2)
=> b=false,n=3(不会自增)

条件运算符

  • java中的条件运算符是三目运算符(三元运算符)
  • 语法:布尔表达式 ?表达式1 : 表达式2,如:3 > 2 ? a : b 输出为a
    当布尔表达式的值为true时,返回表达式1的值,否则返回表达式2的值
  • 示例:计算3个数最大值 -> int max = (x > y ? (x>z ? x: z) : (y>z ? y : z));
  • 单目运算符 ++,--
  • 双目运算符 +,-,*,/,&&,>,>=, ==, !=等

注意:三元运算符实现的,都可以采用if语句实现。反之不成立。
当if语句控制的操作是一个输出语句的时候就不能使用三元运算符。因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出语句。

运算符的优先级

以下运算符优先级从高到底,实际使用运算符根据逻辑多添加括号增加可读性且不容易出错
整体优先级:算术运算符>关系运算符>逻辑运算符>赋值运算符 一元>二元>三元运算符

Java运算符_第7张图片

位运算符(扩展)

  • 位运算是直接对二进制补码进行运算
  • 包含:&(与),|(或),^(异或) , ~(按位取反) ,<<(左移) ,>>(右移) ,>>>(无符号右移)
  • "<<": 左移 左边最高位丢弃,右边补齐0
  • ">>": 右移 最高位是0,左边就补0;最高位是1,左边补齐1
  • ">>>": 无符号右移 无论最高位是 0还是1,左边补齐0
运算规律
  • 位异或特点,某个数据异或另一个数据两次得到的结果是其本身。
    a ^ b ^ b = a
  • &: 有0则0; |: 有1则1; ^: 相同则0不同则1;~: 按位取反
  • "<<": 把<<左边的数据乘以2的移动次幂
  • ">>": 把>>左边的数据除以2的移动次幂

示例一:

public static void main(String[] args) {
    int a = 3;
    int b = 4;
    System.out.println(a & b);   
    System.out.println(a | b);
    System.out.println(a ^ b);
    System.out.println( ~ a);
}  
    /*int a  3 0b11  4个字节
      原码 00000000 00000000 00000000 00000011
      补码 00000000 00000000 00000000 00000011
      int b  4 0b100  4个字节
      原码 00000000 00000000 00000000 00000100
      补码 00000000 00000000 00000000 00000100

      位与&  有0则0 
       00000000 00000000 00000000 00000011
&      00000000 00000000 00000000 00000100
--------------------------------------------------
       00000000 00000000 00000000 00000000  补码
  原码 00000000 00000000 00000000 00000000
            结果:0

      位或| 有1则1 
         00000000 00000000 00000000 00000011
|        00000000 00000000 00000000 00000100
--------------------------------------------------
       00000000 00000000 00000000 00000111   补码
         原码跟补码一样
         结果:7

      位异或^ 相同为0 不同为1 
         00000000 00000000 00000000 00000011
^        00000000 00000000 00000000 00000100
--------------------------------------------------
       00000000 00000000 00000000 00000111  补码
         原码补码相同
         结果:7

     
   ~按位取反  0变1,1变0
      00000000 00000000 00000000 00000011
--------------------------------------------
~     11111111 11111111 11111111 11111100   补码

补码:11111111 11111111 11111111 11111100 
反码:11111111 11111111 11111111 11111011
原码:10000000 00000000 00000000 00000100  
    数值位是4 
      符号位-
      结果  -4 
*/

示例二:

public static void main(String[] args) {
    //左移相当于把<<左边的数乘以2的移动次方(幂)
    System.out.println(3<<2);//12=3*4=3*2^2
    
    //右移相当于把>>左边的数除以2的移动次方(幂)
     System.out.println(24>>2);//24/4=6
     System.out.println(24>>>2);//24/4=6

     System.out.println(-24>>2);//-24/4=-6
}

示例三:计算-15 >>> 2

Java运算符_第8张图片

你可能感兴趣的:(Java运算符)