【Java】运算符详解!!!

目录

运算符主要分类

算术运算符

1. 基本四则运算符:加减乘除模(+-*/%)

2.增量运算符:+=、-=、*=、%= 

3.自增/自减运算符: ++/--

关系运算符

逻辑运算符

1.逻辑与  && 

2.逻辑或  || 

3.逻辑非 !

短路求值:

位运算符

1.按位与&:如果 两个二进制为都为1,结果为1,否则为0;

2. 按位或|:如果二进制位都为0,结果为0,否则为1;

3.按位取反~:如果该为1转为0,如果为0转为1;

4.按位异或^:如果两个数字二进制位相同,结果为0,不同结果为1

移位运算符

1.左移<<:把最左侧的数字去掉右侧补0;

2.右移<<:最右侧不要了,最左侧补符号位(正数补0,负数补1);

3.无符号右移>>>:把最右侧的数字去掉,左侧补0;

条件运算符


什么是运算符?

运算符是编程语言中用于执行各种操作的特殊符号或关键字。用于处理变量和值,执行数字计算、逻辑运算符、位运算和其他操作,以便编写复杂的程序

运算符主要分类

算术运算符

1. 基本四则运算符:加减乘除模(+-*/%)

public class Test_0522 {
    public static void main(String[] args) {
        int a=2;
        int b=4;
        System.out.println(a+b);//6
        System.out.println(a-b);//-2
        System.out.println(a*b);//8
        System.out.println(a/b);//0
        System.out.println(a%b);//2
        /*  %和/的运算  */
        int c=3;
        int f=7;
        double d=4.5;
        System.out.println(f/c);//2 整形/整形的结果为整形,及时计算结果包含小数,也会抹去小数
        System.out.println(d%c);//1.5 java中不仅能对整数取模还能对小数取模
        System.out.println(d/c);//1.5 整形与双精度浮点型的计算,会先将整形进行自动转换(隐式)将int—>double,在进行计算
        /*关于0的位置*/
        // System.out.println(a/0); 0不可以作为被除数,编译器无法得出结果
        System.out.println(0/a);//0 0可以作为除数,得出结果都为0
        //System.out.println(a%0); 0不可以作为被模数,编译器无法得出结果
        System.out.println(0%a);//0 0可以作为模数,得出结果都为0
    }
}
  • 四则基本运算符都是二元运算符,使用时必须要有左右两个操作符 
  • 整形/整形结果还是整形,即使计算结果是小数,也会抹去小数 ;
  • %取模不仅能对整数,也能对小数取模
  • %取模和/除法中,0不可以作为右操作符,编译器无法得出结果;
  • %取模和/除法中,0可以作为左操作符,但结果都为0。

2.增量运算符:+=、-=、*=、%= 

public class Test {
    public static void main(String[] args) {
        int a=4;
        a+=1;//相当于a=a+1
        System.out.println(a);//5
        a-=1;//相当于a=a-1
        System.out.println(a);//4
        a*=2;//相当于a=a*2
        System.out.println(a);//8
        a%=2;//相当于a=a%2
        System.out.println(a);//0
    }
  • 注意:只有变量才能使用该操作符,常量不能使用

3.自增/自减运算符: ++/--

  • 自增++:给变量加1;
  • 自减--:给变量减1 ;
   public static void main(String[] args) {
        int a=2;
        a++;//后置++,表示给a值加上1
        System.out.println(a);//3
        a=2;
        ++a;//前置++,表示给a值加上1
        System.out.println(a);//3 单独使用时,前置++与后置++没有区别,a本身都会++
        a=2;
        a--;//后置--,表示给a值减上1
        System.out.println(a);//1
        a=2;
        --a;//后置--,表示给a值减上1
        System.out.println(a);//1 单独使用时,前置--与后置--没有区别,a本身都会--
        a=2;
        System.out.println(a++);//2 后置++,先使用变量原来的值后,表示式结束时给变量加1
        System.out.println(++a);//4 前置++,先给变量加1后,在使用变量加1后的值
        System.out.println(a--);//4 同理,后置--,先使用变量原来的值后,表示式结束时给变量减1
        System.out.println(--a);//2 前置++,先给变量减1后,在使用变量减1后的值
    }
  • 单独使用时,前置++与后置++,没有区别变量本身都会++
  • 混合使用时前置++:变量先++,在使用变量++后的值,前置-- 同理;
  • 混合使用时后置++:变量原本的值先使用,在进行变量的++,后置-- 同理 。
  • 只有变量才能使用自增/自减运算符,常量不可以。

关系运算符

关系运算符主要有6个:==、!=、<、>、<=、>=

其计算结果是true或false

 public static void main(String[] args) {
        System.out.println(2==3);//false
        System.out.println(2!=3);//true
        System.out.println(2<3);//true
        System.out.println(2>3);//false
        System.out.println(2<=3);//true
        System.out.println(2>=3);//false
        System.out.println(2.3<=3.0);//true 浮点型
        System.out.println('a'=='a');//true 字符型
        System.out.println(true==true);//true 布尔型
    }
  • 关系运算符可以不仅可以运用于整型,其他基本数据类型同样可以使用;
  • 当有多个数据进行比较时,不可以连着写,如,1<2<3.需要运用到逻辑运算符;
  • 其中布尔类型的使用只能为==或者!=,其他关系运算符不可以使用,否则编译器报错。

逻辑运算符

1.逻辑与  && 

语法规则:

表达式1  &&  表达式2 

 public static void main(String[] args) {
        System.out.println(1<=2&&2<3);//true 全真为真
        System.out.println(1.2>=2&&2<3);//false 左假右真为假
        System.out.println(1<=2&&2>3);//false 右假左真为假
        System.out.println('b'>='a'&&2>3);//false  全假为假
    }
  • 左右两边的表达式结果需要为布尔类型,也就是true或者false ;
  • 左右两边的表达式的类型可以不同
  • 结果遵循:全真(true)则为真(true),有假(false)则假(false)。

2.逻辑或  || 

语法规则:

表达式1  ||   表达式2

 

 public static void main(String[] args) {
        System.out.println(1<=2 || 2<=3);//true 全真为真
        System.out.println(1>=2 || 2<=3);//true 左假右真为真
        System.out.println(1<=2 || 2<=3);//true 左真右假为真
        System.out.println(1>=2 || 2>=3);//false 全假为假
    }
  • 左右表达式的结果需要为布尔类型(true或者false),也就是需要运用到关系表达式;
  •  结果遵循:有真(true)则为真(true),全假(false)则为假(false)

3.逻辑非 !

语法规则:

!表达式

 public static void main(String[] args) {
        System.out.println(!(2==1));//2==1为假 !表相反,即结果为真
        System.out.println(!(2==2));//2==2为真 !表相反,即结果为假
    }
  • 逻辑与中写的表达式要加上括号();
  • 结果遵循:与表达式的结果相反 。

短路求值:

逻辑与&&与逻辑||遵守短路求值规则:

  public static void main(String[] args) {
        //我们可以知道0不能作为被除数,否则编译器报错,但下面代码可以正常运行说明1/0没有被真正求值
        System.out.println(1>2 && 1/0==0);//false
        System.out.println(1<2 || 1/0==0);//true
    }
  • &&结果遵循为全真才为真,有一假即假,所以程序计算左表达式的结果为假(false),那么结果就是假(false)的,无需再看右表达式的结果;
  • ||结果遵循有一真即为真,全假为假,所以程序计算左表达式的结果为真(true),那么结果就是真(true),无需再看右表达式得结果;

位运算符

位运算符主要有四个:&、| 、~、^

  • 其中~是一元,其他都是二元运算符 
  • 位操作是按二进制位来运算的

1.按位与&:如果 两个二进制为都为1,结果为1,否则为0;

public static void main(String[] args) {
        int a=1;//            二进制:001
        int b=2;//            二进制:010
        System.out.println(a&b);//0  000
    }
  • 如果操作数是boolean类型,&按逻辑运算,也就是有一个假就是假 

2. 按位或|:如果二进制位都为0,结果为0,否则为1;

  public static void main(String[] args) {
        int a=1;//                  001
        int b=2;//                  010
        System.out.println(a|b);//3 011
    }
  • 如果操作数是boolean类型,|按逻辑运算,也就是有一个真就是真 

3.按位取反~:如果该为1转为0,如果为0转为1;

  • ~是一元操作符
   public static void main(String[] args) {
        int a=1;//                  001
        System.out.println(~a);//-2 110
    }

4.按位异或^:如果两个数字二进制位相同,结果为0,不同结果为1

 public static void main(String[] args) {
        int a=1;//                  001
        int b=2;//                  010
        System.out.println(a^b);//3 011
    }
  • 规律:n^n=0  n^0=0;

移位运算符

移位运算符有三个(<<  、>> 、>>>) ,都是二元操作符,按二进制比特位运算

1.左移<<:把最左侧的数字去掉右侧补0;

   public static void main(String[] args) {
        int a=15;//                   0000 1111
        System.out.println(a<<1);//30  0001 1110
        System.out.println(a<<2);//60  0011 1100
    }
  •  每左移一个比特位,结果变为原来的2倍;
  • 左移去掉的是符号位,所以正数可能变为负数; 

2.右移<<:最右侧不要了,最左侧补符号位(正数补0,负数补1);

  public static void main(String[] args) {
        int a=16;//                   0001 0000
        System.out.println(a>>1);//8  0000 0100
        System.out.println(a>>2);//4  0000 0010
    }
  • 每右移一个比特位,结果变为原来的1/2倍

3.无符号右移>>>:把最右侧的数字去掉,左侧补0;

public static void main(String[] args) {
        int a=9;//                                         0000   1001
        System.out.println(a>>>2);//表示向右移两个比特位,结果为2 0000  0010
    }
  • 没有无符号左移 

条件运算符

条件运算符只有1个

表达式1?表达式2:表达式3

  • 如果表达式1为真,结果为表达式2,否则为表达式3 
  public static void main(String[] args) {
        int a=1;
        int b=2;
        System.out.println(a>b?1:2);//2 1>2结果为假,所以结果为表达式3,为2
    }
  • 表达式1的结果需要为布尔类型;
  • 表达式2和表达式3的类型需要相同,除非可以进行隐式类型转换;
  • 条件运算符不能单独使用,否则编译器会发生报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值