运算符与表达式

一、运算符的分类

1.算数运算符

2.赋值运算符

3.比较运算符

4.逻辑运算符

5.位运算符

6.三元运算符

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

二、熟练掌握算数运算符

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

运算符

运算规则

范例

结果

+

正号

+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是一个工具类,主要目标是简化文本的扫描,最常使用此类获取控制台输入

Scanner获取控制台输入的步骤

1、使用控制台输入创建Scanner对象

Scanner  scanner=new  Scanner(System.in);

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

例如:next、 nextLine、nextInt、nextByte等

(四)案例

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

public class a {
    public static void main(String[] args) {
        int  a = 5 ;
        a = a++ + ++a  + ++a +(a+1);
        //a=5+7+8+9
        System.out.println(a);
    }
}

2.从控制台输入学员王浩3门课程成绩,编写程序实现

   (1)Java课和SQL课的分数之差

   (2)3门课的平均分

思路:

  1. 导包java.util.Scanner
  2. Scanner scanner=new Scanner(System.in);
  3. 提示输入成绩
  4. 使用变量接收scanner.nextDouble();
  5. 输出三门课程的成绩
  6. 输出java和sql的成绩差
  7. 输出三门成绩的平均分
    import java.util.Scanner; //导包
      public class MyScanner {
        public static void main(String[] args) {
            //创建Scanner对象,System.in:键盘输入对象
            Scanner scanner = new Scanner(System.in);
            //提示
            System.out.println("请输入姓名:");
            //接收键盘输入的姓名
            String name = scanner.next();//next()返回的是字符串
            //提示
            System.out.println("请输入年龄:");
            //接收键盘输入的年龄
            int age = scanner.nextInt();//nextInt()返回的是整数
            //输出
            System.out.println("姓名:"+name);
            System.out.println("年龄:"+age);
        }
    }
     
    结果:
    请输入姓名:
    张三
    请输入年龄:
    21
    姓名:张三
    年龄:21

     

三、熟练掌握赋值运算符

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

运算符

运算规则

范例

结果

=

赋值

int a=5;

5

+=

加后赋值

int a=5;a+=5;

10

-=

减后赋值

int a=5;a-=5;

0

*=

乘后赋值

int a=5;a*=5;

25

/=

整除后赋值

int a=5;a/=5;

1

%=

取模后赋值

int a=5;a%=5;

0

 

 

 

 

 

 

 

 

 

 

 

 

 

int a = 3;   a+=5;等同运算a=a+5;

short s = 3;  

s=s+2;//报错

s+=2;    //不报错

有什么区别?

s=s+2 先将右侧的操作数变量提升类型到int,赋值给s需要手动强制转换,不转换就报错

s+=2 编译器对+=进行特殊处理,包括强制转换,不报错

四、熟练掌握比较运算符

比较运算符又叫关系运算符,用来运算两个操作数的大小关系,返回值是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.除了==  !=外,都只能比较基本数据类型

五、熟练掌握逻辑运算符

运算符

运算规则

范例

结果

&

false&true

false

|

false|true

true

^

异或

false^true

true^true

true

false

!

!true

flase

&&

双与(短路)

false&&true

false

||

双或(短路)

false||true

true

 

 

 

 

 

 

 

 

 

 

 

 

 

注意:&和 && 的不同

             | 和  ||  的不同

  逻辑运算中的与和或运算都分别有两个,&和&&以及|和||

    &和|称为非短路逻辑运算;|和||称为短路逻辑运算;

      如果存在T1&T2,当T1为false时,返回值已经确定为false,但是依然还会运算T2表达式;所以称为非短路;

      如果存在T1&&T2,当T1为false时,返回值已经确定为false,就不会运算T2表达式;所以称为短路;

 

  |与||也存在类似逻辑,当第一个表达式为true时,因为已经确定了返回值肯定是true ,所以||就不再运算第二个表达式;

 

案例1:a>5 & b++<3表达式与a>5 && b++<3表达式有什么区别?

&:非短路  false 3        &&:短路  false 2

int a=1;
  int b=2;
  boolean result=a>5 && b++<3 ;
  System.out.println("result = " + result);//false
  System.out.println("b = " + b);//2

案例2:  模拟登入操作(控制台输入用户名和密码,非空判断) 

import java.util.Scanner;】
public class 案例用户名判断 { public static void main(String[] args) { //成绩Scanner对象 Scanner scanner = new Scanner(System.in); while (true) { System.out.println("请输入用户名:"); String username = scanner.nextLine(); System.out.println("请输入密码:"); String password = scanner.nextLine(); //判断 // if (username.equals("") || password.equals("")){ if (username.isEmpty() || password.isEmpty()){ System.out.println("用户名或者密码不能为空"); }else{ System.out.println("登录成功"); break; } } } }

 

六、深熟练掌握位运算包括位移运算和位逻辑运算的运算法则

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

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

运算符

运算规则

范例

结果

&

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

15&6

6

|

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

15|6

15

^

异或(相同二进制位进行 ^ 运算,结果是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

                                                       

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

    2<<3

负数在计算机中是用补码的形式存储的,正数在计算机中是用原码的形式存储的。

正数求原码直接将十进制转二进制即可,负数的补码是在原码的基础上除符号位外其余位取反后+1。 

七、熟练掌握三元运算符

三元运算符格式:

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

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

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

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

案例一:获取两个数中的最大数
案例:获取两个数中的最大数
int a=100;
  int b=10;
  int max=a>b?a:b;
  System.out.println("max = " + max);

案例二:获取三个数中的最大数

案例二:获取三个数中的最大数
int a=100;
  int b=20;
  int c=300;
 int max=a>b?a:b;
 max=c>max?c:max;
 System.out.println("max = " + max);

八、复杂的表达式

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

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

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

num1+num2

a*(b+c)+d

3.14      

x<=(y+z) 

x&&y||z

九、作业

1、编写一段Java程序,每次用户从键盘输入一个整数,并且在控制台输出这个整数。如果输入的不是整数,控制台输出“输入错误”

public class 作业1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        if (scanner.hasNextInt()){
            System.out.println(scanner.nextInt());
        }else{
            System.out.println("输入错误");
        }
    }
}

2、给定一个任意的大写字母A~Z,转换为小写字母

(10分)

public class 作业2 {
    public static void main(String[] args) {
        /*String a="A";
        String s = a.toLowerCase();
        System.out.println("s = " + s);*/
        char a='A';
        char b=(char)(a+32);
        System.out.println("b = " + b);
    }
}

3、取一个整数 a 从右端开始的 4~7 位。

123456789

import java.util.Scanner;
  public class 作业3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数");
        long l = scanner.nextLong();
        String s = Long.toString(l);
        char[] chars = s.toCharArray();
        int length = chars.length;
        if (length >=7){
            System.out.println("从右端开始的 4~7 位:"+chars[length-7]+chars[length-6]+chars[length-5]+chars[length-4]);
        }else{
            System.out.println("输入有误");
        }
    }
}

 

posted @ 2022-04-20 21:35  MM&WW  阅读(193)  评论(0编辑  收藏  举报