3.4 运算符、表达式与语句

3.4 运算符、表达式与语句

程序由很多语句组成,而语句的基本单位是表达式和运算符。

3.4.1 运算符

Java语句有很多种形式,表达式是其中一种。

表达式由操作数与运算符组成,操作数可以是常量、变量,也可以是方法;运算符就是数学中的运算符号。

运算符可分为以下种类:

1.赋值运算符

赋值运算符
赋值运算符号描述
=赋值

=是赋值的意思,不是等于的意思。

语法:变量名称=设置值;

package com;

public class OperatorDemo01 {
    public static void main(String[] args) {
        int num=22;
        System.out.println("第一次输出num="+num);
        num=num-3;
        System.out.println("第二次输出num="+num);
    }
}
第一次输出num=22
第二次输出num=19

Process finished with exit code 0
int sum=num1+num2;      //num1与num2相加之后的值赋给变量sum存放,num1和num2值不变

 

2.一元运算符

+3;       //表示正3
b=-a;     //表示负a的值赋给变量b存放
!a;       //a的NOT运算,若a为0,则!a为1;若a不为0,则!a为0
一元运算符
序号一元运算符描述
1+正号
2-负号
3NOT,否
package com;

public class OperatorDemo02 {
    public static void main(String[] args) {
        boolean b=false;
        int x=10;
        int y=-30;
        System.out.println("b="+b+",!b="+!b);
        System.out.println("x="+x+",-x="+ -x);         //++连一起的话表示自增,无法与字符串连接
        System.out.println("y="+y+",+y="+ +y);         //加上空格表示不是自增,相当于字符串连接数字
    }
}
b=false,!b=true
x=10,-x=-10
y=-30,+y=-30

Process finished with exit code 0

 

3.算术运算符 

算术运算符
序号算术运算符描述
1+加法
2-减法
3*乘法
4/除法
5%取模(取余数)
package com;

public class OperatorDemo03 {
    public static void main(String[] args) {
        int i=10;
        int j=3;
        System.out.println("i+j="+(i+j));
        System.out.println("i-j="+(i-j));
        System.out.println("i*j="+(i*j));
        System.out.println("i/j="+(i/j));
        System.out.println("i%j="+(i%j));
    }
}
i+j=13
i-j=7
i*j=30
i/j=3
i%j=1

Process finished with exit code 0

 

4.关系运算符 

if语句格式:if(布尔表达式){

                             语句;

                     }

关系运算符
序号关系运算符描述
1>大于
2<小于
3>=大于等于
4<=小于等于
5==等于
6!=不等于
package com;

public class OperatorDemo04 {
    public static void main(String[] args) {
        System.out.println("3>1="+(3>1));
        System.out.println("3<1="+(3<1));
        System.out.println("3>=1="+(3>=1));
        System.out.println("3<=1="+(3<=1));
        System.out.println("3==1="+(3==1));
        System.out.println("3!=1="+(3!=1));
    }
}
3>1=true
3<1=false
3>=1=true
3<=1=false
3==1=false
3!=1=true

Process finished with exit code 0

if语句经常使用到关系运算符,条件判断为一个布尔表达式或布尔值

如果if语句只有一条语句,可以不加{},但为了方便调试,不建议省略

5.自增与自减运算符 

自增与自减运算符
序号自增与自减运算符描述
1++自增,变量值加1
2--自减,变量值减1

自增与自减运算符使程序更简洁。

eg:a=a+1;与a++;意义相同

a++和++a的区别:a++先使用后加1,++a先加1后使用

package com;

public class OperatorDemo06 {
    public static void main(String[] args) {
        int a=3,b=3;
        int x=6,y=6;
        System.out.println("a="+a);
        System.out.println("\ta++="+(a++)+",a="+a);
        System.out.println("b="+b);
        System.out.println("\t++b="+(++b)+",b="+b);
        System.out.println("x="+x);
        System.out.println("\tx--="+(x--)+",x="+x);
        System.out.println("y="+y);
        System.out.println("\t--y="+(--y)+",y="+y);
    }
}
a=3
	a++=3,a=4
b=3
	++b=4,b=4
x=6
	x--=6,x=5
y=6
	--y=5,y=5

Process finished with exit code 0

 

6.逻辑运算符 

逻辑运算符
序号逻辑运算符描述
1&AND,与
2&&短路与
3|OR,或
4||短路或

&&,两个均为真,返回真

||,其中一个为真,返回真

AND与OR结果表
序号条件1条件2&&(与)||(或)
1truetruetruetrue
2truefalsefalsetrue
3falsetruefalsetrue
4falsefalsefalsefalse

如果需要同时判断多个条件,使用以上逻辑运算符

package com;

public class OperatorDemo08 {
    public static void main(String[] args) {
        int score=50;                                //定义变量score
        if((score<0)||(score>100)){                  //判断成绩是否有错
            System.out.println("输入的成绩有误");
        }
        if((score<60)&&(score>49)){                  //判断成绩结果
            System.out.println("补考吧,比重修要好");
        }
    }
}
补考吧,比重修要好

Process finished with exit code 0

两种与和或,区别?

&&:短路与    &:非短路与(与)

||:短路或       |:非短路或(或)

1.&要求所有的条件都判断,&&若第一个条件为false,则后面不判断

2.|要求所有的条件都判断,||若第一个条件为true,则后面不判断

&:

package com;

public class OperatorDemo09 {
    public static void main(String[] args) {
        if(10!=10&10/0==0){
            System.out.println("条件满足");
        }
    }
}
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.OperatorDemo09.main(OperatorDemo09.java:5)

Process finished with exit code 1

&&:

package com;

public class OperatorDemo10 {
    public static void main(String[] args) {
        if(10!=10&&10/0==0){
            System.out.println("条件满足");
        }
    }
}
Process finished with exit code 0

|:

package com;

public class OperatorDemo11 {
    public static void main(String[] args) {
        if(10!=10|10/0==0){
            System.out.println("条件满足");
        }
    }
}
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.OperatorDemo11.main(OperatorDemo11.java:5)

Process finished with exit code 1

||:

package com;

public class OperatorDemo12 {
    public static void main(String[] args) {
        if(10==10||10/0==0){
            System.out.println("条件满足");
        }
    }
}
条件满足

Process finished with exit code 0

 

7.括号运算符 

括号运算符
括号运算符描述
()提高括号中表达式的优先级

括号运算符可以使括号内表达式优先处理。

package com;

public class OperatorDemo14 {
    public static void main(String[] args) {
        int result1=3+5+4*6-7;
        int result2=(3+5+4)*(6-7);
        System.out.println("3+5+4*6-7="+result1);
        System.out.println("(3+5+4)*(6-7)="+result2);
    }
}
3+5+4*6-7=25
(3+5+4)*(6-7)=-12

Process finished with exit code 0

 

8.位运算符 

位运算操作就是指进行二进制位的运算。

位运算符
序号位运算符描述
1&按位与
2|按位或
3^异或()
4~取反
5<<左移位
6>>右移位
7>>>无符号右移位

在Java中所有数据都是以二进制的形式运算的,即如果是一个int型变量,要采用位运算时必须将其变为二进制数据。

位运算的结果表
序号二进制数1

二进制数2

与操作(&)或操作(|)异或操作(^)
100000
201011
310011
411110
package com;

public class OperatorDemo15 {
    public static void main(String[] args) {
        int x=3;                   //3的二进制数据:00000000 00000000 00000000 00000011
        int y=6;                   //6的二进制数据:00000000 00000000 00000000 00000110
        System.out.println(x&y);   //与操作的结果: 00000000 00000000 00000000 00000010
        System.out.println(x|y);   //或操作的结果: 00000000 00000000 00000000 00000111
        System.out.println(x^y);   //异或操作结果: 00000000 00000000 00000000 00000101
    }
}
2
7
5

Process finished with exit code 0

在计算机的数据表示中只定义了正数的表示形式,没有定义负数的表示形式。负数一般都用补码的形式表示,正数的原码、反码、补码都相同,负数的反码是除符号位为1外,其它位全取反;补码=反码+1

package com;

public class OperatorDemo16 {
    public static void main(String[] args) {    //-3原码:  10000000 00000000 00000000 00000011
        int x=-3;                               //-3反码:  11111111 11111111 11111111 11111100
        System.out.println(x+"的反码是:"+~x);    //-3补码:  11111111 11111111 11111111 11111101
                                                //取反:    00000000 00000000 00000000 00000010  即2
    }
}
-3的反码是:2

Process finished with exit code 0

左移<<是将运算数的二进制码整体左移指定位数,左移之后的空位使用0来填充。

右移>>是将运算数的二进制码整体右移指定位数,右移之后的空位以符号位填充。如果是正数使用0填充,如果是负数使用1填充。

package com;

public class OperatorDemo18 {
    public static void main(String[] args) {
        int x=3;                                         //3的二进制数据:       00000000 00000000 00000000 00000011
        System.out.println(x+"左移两位之后的内容"+(x<<2));  //左移两位,空位用0填充: 00000000 00000000 00000000 00001100

        int a=3;
        int b=-3;                                        //-3的二进制数据:      11111111 11111111 11111111 11111101
        System.out.println(a+"右移两位之后的内容"+(a>>2));  //右移两位,空位用0填充: 00000000 00000000 00000000 00000000
        System.out.println(b+"右移两位之后的内容"+(b>>2));  //右移两位,空位用1填充: 11111111 11111111 11111111 11111111补码转换为原码为-1
    }
}
3左移两位之后的内容12
3右移两位之后的内容0
-3右移两位之后的内容-1

Process finished with exit code 0

无符号右移>>>,空位用0填充

package com;

public class OperatorDemo19 {
    public static void main(String[] args) {
        int a=3;                                               //3的二进制数据:            00000000 00000000 00000000 00000011
        int b=-3;                                              //-3的二进制数据:           11111111 11111111 11111111 11111101
        System.out.println(a+"无符号右移两位之后的内容"+(a>>>2));  //无符号右移两位,空位用0填充: 00000000 00000000 00000000 00000000
        System.out.println(b+"无符号右移两位之后的内容"+(b>>>2));  //无符号右移两位,空位用0填充: 00111111 11111111 11111111 11111111
    }
}
3无符号右移两位之后的内容0
-3无符号右移两位之后的内容1073741823

Process finished with exit code 0

对于位操作只适用于byte、short、int、char、long类型,而且位操作之后的原始内容不改变。

9.运算符的优先级 

运算符的优先级
优先级运算符结合性
1()括号运算符由左至右
1[]方括号运算符由左至右
2!   +(正号)   -(负号)一元运算符由右至左
2~位逻辑运算符由右至左
2++  --自增与自减运算符由右至左
3*  /  %算术运算符由左至右
4+  -算术运算符由左至右
5<<  >>位左移、右移运算符由左至右
6>  >=  <  <=关系运算符由左至右
7== !=关系运算符由左至右
8&(位运算符AND)位逻辑运算符由左至右
9^(位运算符XOR)位逻辑运算符由左至右
10|(位运算符OR)位逻辑运算符由左至右
11&&逻辑运算符由左至右
12||逻辑运算符由左至右
13?:三目运算符由右至左

结合性决定当使用同一优先级的运算符时,谁会先被处理。“由左至右”,就是在相同优先级的运算符中,先由运算符左边的操作数开始处理,再处理右边的操作数。

3.4.2 简洁表达式 

表达式是由常量、变量或是其他操作数与运算符所组合而成的语句。

eg:-49                    表达式由一元运算符-和常量49组成

      sum+2                表达式由变量sum、算术运算符与常量2组成

      a+b-c/(d*3-9)     表达式由变量、常量与运算符所组成

还有一些将算术运算符和赋值运算符结合成为新的运算符。

新的运算符
序号运算符范例用法说明描述
1+=a+=b

a+b的值存放到a中

a=a+b
2-=a-=ba-b的值存放到a中a=a-b
3*=a*=ba*b的值存放到a中a=a*b
4/=a/=ba/b的值存放到a中a=a/b
5%=a%=ba%b的值存放到a中a=a%b

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值