java运算符

目录

1、算术运算符

2、赋值运算符

3、比较运算符

4、逻辑运算符

5、位运算符

6、三元运算符

7、复杂的表达式


从功能角度分,Java中的运算符可以分为:

算数运算符、赋值运算符、 比较运算符、逻辑运算符、位运算符、三元运算符

运算符既可以对变量进行运算,也可以对常量进行运算,被运算的数据称作操作数

int a=13;
int b=5;
int c=a+b;  //a与b都是操作数

1、算术运算符

算术运算符用来对操作数进行数学运算

运算符

运算规则

范例

结果

+

正号

+31

31

+

5+5

10

+

连接字符串

“中软”+“国际”

“中国国际”

-

负号

int a=43;-a

-43

-

3-1

2

*

2*3

6

/

5/5

1

%

取模

5%5

0

++

自增

a=2; b=++a;(自增前) a=2; b=a++;(自增后)

a=3;b=3; a=3;b=2;

--

自减

a=2 b=--a;(自减前) a=2; b=a--;(自减后)

a=1;b=1; a=1;b=2;

Scanner是一个工具类,主要目标是简化文本的扫描,最常使用此类获取控制台输

Scanner获取控制台输入的步骤

        1、使用控制台输入创建Scanner对象:Scanner scanner=new Scanner(System.in);

        2、调用Scanner中的nextXXX方法,获得需要的数据类型

                例如:next、 nextLine、nextInt、nextByte等

int a = 5 ; a = a++ + ++a + ++a +(a+1);请问a 的输出结果?5+7+8+9= 29

2、赋值运算符

Java中的赋值可以使用普通的=进行赋值;也可以=与其他运算符一起进行复合赋值,即运算后赋值;

int a = 3;   
a+=5;  //等同运算a=a+5;
short s = 3;   
s=s+2;  //报错,short类型运算结果 是int类型 
s+=2;   //编译器优化,通过反编译看出 代码如short s = (short)(s + 2); 
//有什么区别?
//赋值运算符
public class AssigningOperator {
  public static void main(String[] args) {
  //    int a=5;
  //    int a=5;
  //    a+=5;
  //    int a=5;a-=5;
  //    int a=5;a*=5;
  //    int a=5;a/=5;
        int a=5;a%=5;
        System.out.println(a);
  //    int a = 3;   a+=5;
  //    a=a+5;
  //    short s = 3;   
  //    s=s+2;  //编编译错误
  //    s+=2; // 反编译会发现其实执行的是:s=(byte)(s+2) 所以不会编译出错
  }
}

3、比较运算符

比较运算符又叫关系运算符,用来运算两个操作数的大小关系,返回值是true或false;

运算符

运算规则

范例

结果

==

相等于

4==3

false

!=

不等于

4!=3

true

<

小于

4<3

false

>

大于

4>3

true

<=

小于等于

4<=3 3<=3

false true

>=

大于等于

4>=3 3>=3

true true

注意:1.==与!=比较基本数据类型是比较值,比较引用类型是虚地址

2.除了== !=外,都只能比较基本数据类型

//比较运算符
public class CompareOperator{
    public static void main(String[] args) {
      // == 和!=  基本数据类型:比较值(二进制)  引用数据类型:比较地址
      
    int a = 10;
    int b = 10;
    System.out.println(a==b);  //== 比较二进制 true
    
    int c = 13;
    int d = 14;
    System.out.println("c>d:"+(c>d));  //false 
    System.out.println("c<d:"+(c<d));  //true
    System.out.println("c>=d:"+(c>=d)); //false
    System.out.println("c<=d:"+(c<=d)); //true
    System.out.println("c==d:"+(c==d)); //false
    System.out.println("c!=d:"+(c!=d)); //true
    
      // == 比较基本数据类型比较的是二进制  0.3 0.6 1.2 。2.4   64   32   
      // double 0.000000...00001   f 0.00....001
      // 0.01 ==  0.01  true
      System.out.println(0.3==0.3f);  // false  
      System.out.println(0.5==0.5f);  // true 
      System.out.println(1.1-0.9);
            
// == 比较基本数据类型比较的是二进制  0.3 0.6 1.2 。2.4   64   32   
      // double 0.000000...00001   f 0.00....001
      // 0.01 ==  0.01  true
        double d1 = 0.3;  //64
        float  d2 = 0.3f;   //32
        System.out.println(d1 == d2);  //false
        double d3 = 0.5;  
        float d4 = 0.5f;
        System.out.println(d3 == d4);  //true
    
  }
}

4、逻辑运算符

运算符

运算规则

范例

结果

&

false&true

false

false

^

异或

false^true true^true false^false

true false false

!

!true

flase

&&

双与(短路)

false&&true

false

双或(短路)

false

  - 注意:&和 && 的不同,| 和|| 的不同**
  - 逻辑运算中的与和或运算都分别有两个,&和&&以及|和||
  - &和|称为非短路逻辑运算;&&和||称为短路逻辑运算;
  - 如果存在T1&T2,当T1为false时,返回值已经确定为false,但是依然还会运算T2表达式;所以称为非短路;
  - 如果存在T1&&T2,当T1为false时,返回值已经确定为false,就不会运算T2表达式;所以称为短路;
  - |与||也存在类似逻辑,T1||T2 ,当第一个表达式T1为true时,因为已经确定了返回值肯定是true ,所以||就不再运算第二个表达式T2;

public class LogicOperator {
  public static void main(String[] args) {
        int a = 4;
        int b = 1;
        //全真为真(左右两个表达式都为真)  有假为假(左右有一个为假,结果为假)
        //            &  无论左边表达式是否为假   ,右边都执行     执行到了第二个条件  b++
        System.out.println(a > 5 & b++ < 3);
        System.out.println("b=" + b);     //b=2
        //&&左边的表达式为false,就已经知道了逻辑表达式的结果了 ,右边的表达式就不会再执行
        System.out.println(a > 5 && b++ < 3);
        System.out.println("b=" + b);   //b=2
        //! 非 取反
        System.out.println(!(a > 5 && b++ < 3));  //true     b++ < 3 返回的是true    b++表达式的值是2 
        // a>5 为false   b<3为true     异或^  最后结果为true
        System.out.println(a > 5 ^ b < 3);
        
        int c = 4;
        int d = 1;

        System.out.println(c > 3 | d++ < 3);  //true
        System.out.println("d=" + d);   //d=2
        System.out.println(c > 3 || d++ < 3); // true
        System.out.println("d=" + d);   //d=2
    }
}

5、位运算符

位运算符针对操作数的二进制位进行运算;

15的二进制是00001111, 6的二进制是00000110

运算符

运算规则

范例

结果

&

位与(二进制位进行&运算,只有1&1时结果是1,否则是0;)

15&6

6

位或(二进制位进行

运算,只有0

^

异或(相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0 不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1)

15^6

9

~

按位非,将操作数的每个位(包括符号位)全部取反。

~6

-7

<<

左移位(空位补0,被移除的高位丢弃,空缺位补0。)

8<<2

32

>>

右移位( 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。)

8>>2

2

>>>

无符号右移位(被移位二进制最高位无论是0或者是1,空缺位都用0补。)

8>>>2

2

public class BitOperator {
  /*
&:按位与  两位同时为1,才返回值1
|:按位或   只要有1位为1就返回值1 
^:按位异或  相同为0,不同时返回1 
~:按位非,将操作数的每一位(包括符号位)全部取反
<<:左移位,8<<2 ====8*2的2次幂=== 左操作数*2的右操作数次幂
>>:右移位,8>>2 ===8除以2的2次幂==== 左操作数除以2的右操作数次幂
>>>: 无符号又右移
 1248
 15:  0000 1111
 6:   0000 0110
 
 15&6   0000 0110
 15|6   0000 1111   
 15^6   0000 1001
 ~6     1111 1001
 
 十进制 1      00000001      byte -128
      -1     10000001
 
 15&6  0000 0110   6
 15|6  0000 1111   15
 15^6  0000 1001   9
 
 十进制8         二进制 1000   
   8<<2       100000           结果十进制 32    相当于8*2^2(2^2 表示2的2次幂)
   8>>2         10         结果十进制 2     相当于8/2^2(2^2 表示2的2次幂)
   7>>2 (111)       1         结果十进制 1   相当于7/2^2(2^2 表示2的2次幂)
   
   ~6  (00000110 取反 11111001 再减去1  11111000 除去符号位取反得到原码 10000111(原码) 十进制值 -7
 1 */
  public static void main(String[] args) {
    System.out.println(15&6);
    System.out.println(15|6);
    System.out.println(15^6);
    System.out.println(~6);
    System.out.println(~-6);
    System.out.println(8<<2);  //左操作数*2的右操作数次幂  32
    System.out.println(8>>2);  //左操作数除以2的右操作数次幂  2
    System.out.println(8>>>2);  //2
//    System.out.println(7>>2);  //7除以4 1  
  }
}

比2*8运算效率更高的运算方式是什么?

2<<3

6、三元运算符

三元运算符格式:

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

(条件表达式)?表达式1:表达式2;

如果条件为true,运算后的结果是表达式1;

如果条件为false,运算后的结果是表达式2;

//三元运算符
public class TernaryOperator {
  public static void main(String[] args) {
//        test01();
        test02();
        
    }
    //给一个成绩,如果成绩大于60就是及格,否则就是不及格
    private static void test01() {
    int score=68;
        String mark = (score>=60) ? "及格" : "不及格";
        System.out.println("考试成绩如何:"+mark);
  } 
   
  //获取两个数中的较大数   
    //获取三个数中的较大数
  private static void test02() {
         int a = 10;
         int b = 12;
         int c = 13;
         int max1 = a>b?a:b;
         System.out.println("两个数中最大的值是:"+max1);
         int max2 = (a>b?a:b)>c?(a>b?a:b):c;
         System.out.println("三个数中最大的值是:"+max2);
  }
}

7、复杂的表达式

表达式是由操作数和运算符按一定的语法形式组成的符号序列。

一个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值;

表达式的值还可以用作其他运算的操作数,形成更复杂的表达式。

num1+num2
a*(b+c)+d
3.14  
x<=(y+z)  
x&&y||z
/*  从控制台输入学员王浩3门课程成绩,编写程序实现
  (1)Java课和SQL课的分数之差
  (2)3门课的平均分*/
  public static void test03() {
    //1.获取Scanner对象
    Scanner sc = new Scanner(System.in);
    //2.获取控制台输入的三门成绩
    System.out.println("java的成绩是:");
    double javaScore = sc.nextDouble();
    System.out.println("sql的成绩是:");
    double sqlScore = sc.nextDouble();
    System.out.println("html的成绩是:");
    double htmlScore = sc.nextDouble();
    //3.输出获取到的内容
    System.out.println("\n\njava\t sql\t html");
    System.out.println(javaScore+"\t"+sqlScore+"\t"+htmlScore+"\n\n");
    //4.计算成绩差
    double diff = javaScore-sqlScore;
    //5.计算平均分
    double avg = (javaScore+sqlScore+htmlScore)/3;
    
    //6.输出
    System.out.println("java和sql的成绩差:"+diff);
    System.out.println("三门成绩的平均分:"+avg);
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值