运算符与表达式

运算符与表达式

1. 运算符介绍

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。

1) 算术运算符         2) 赋值运算符                                 3) 关系运算符 [比较运算符]
4) 逻辑运算符         5) 位运算符 [需要二进制基础]         6) 三元运算符

1.1 算术运算符

介绍:算术运算符是对数值类型的变量进行运算的

,在Java程序中使用的非常多。

案例:

System.out.println(10/4);//从数学来看是2.5,java中2
 System.out.println(10.0/4);//java是2.5
doubled=10/4;//java中10/4=2,2=>2.0
 System.out.println(d);//是2.0
 //%取模,取余
//在%的本质看一个公式!!!! a%b=a-a/b*b
 // -10%3 => -10-(-10)/3*3=-10+9= -1
 // 10% -3 = 10 - 10/(-3) * (-3) = 10-9 = 1
 //-10%-3 = (-10)-(-10)/(-3)*(-3)=-10+9= -1
System.out.println(10 % 3); //1
 System.out.println(-10 % 3); //-1
 System.out.println(10 %-3); //1
 System.out.println(-10 %-3);//-1
 //++的使用
 int i = 10;
 i++;//自增 等价于 i=i+1;=>i=11
 ++i;//自增 等价于 i=i+1;=>i=12
 System.out.println("i=" + i);//12
 /*
作为表达式使用
前++:++i 先自增后赋值
后++:i++先赋值后自增
*/
 int j = 8;
 //int k = ++j; //等价 j=j+1;k=j;
 int k = j++; // 等价 k=j;j=j+1;
 System.out.println("k=" + k + "j=" + j);//8 9

1.2 细节说明:

1. 对于除号 "/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。例如:int x= 10/3 ,结果是3
2. 当对一个数取模时,可以等价 a%b=a-a/b*b,这样我们可以看到取模的一个本质运算。
3. 当自增当做一个独立语言使用时,不管是++i;还是 i++;都是一样的,等价。

1.3 面试题案例:

// int i = 1; //i->1
 // i = i++;  //规则使用临时变量:(1)temp=i;(2) i=i+1;(3)i=temp;
 // System.out.println(i); // 1
 // int i=1;
 // i=++i; //规则使用临时变量:(1) i=i+1;(2) temp=i;(3)i=temp;
 // System.out.println(i); //2
 // 测试输出
int i1 = 10;
 int i2 = 20;
 int i = i1++;
 System.out.print("i="+i);//10
 System.out.println("i2="+i2);//20
 i =--i2;
 System.out.print("i="+i);//19
 System.out.println("i2="+i2);//19

2. 关系运算符(比较运算符)

2.1 介绍

1) 关系运算符的结果都是boolean型,也就是要么是true,要么是false
2) 关系表达式经常用在 if 结构的条件中或循环结构的条件中

案例演示:

 inta=9; //提示:开发中,不可以使用a,b
 intb=8;
 System.out.println(a>b);//T
 System.out.println(a>=b); //T
 System.out.println(a<=b);//F
 System.out.println(a<b);//F
 System.out.println(a == b); //F
 System.out.println(a != b); //T
 boolean flag = a > b; //T
 System.out.println("flag=" + flag);

2.2 细节说明

1)  关系运算符的结果都是boolean型,也就是要么是true,要么是false。
2)  关系运算符组成的表达式,我们称为关系表达式。 a>b
3)  比较运算符"=="不能误写成"="

3. 逻辑运算符

3.1 介绍

用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值。

3.2 逻辑运算符一览

1)  短路与 && , 短路或 |,取反 !
2)  逻辑与 &,逻辑或 |,^ 逻辑异或

说明逻辑运算规则:

1) a&b:&叫逻辑与:规则:当a和b同时为true,则结果为true,否则为false
2) a&&b:&&叫短路与:规则:当a和b同时为true,则结果为true,否则为false
3) a|b: |叫逻辑或,规则:当a和b,有一个为true,则结果为true,否则为false
4) a||b: ||叫短路或,规则:当a和b,有一个为true,则结果为true,否则为false
5) !a:叫取反,或者非运算。当a为true,则结果为false,当a为false是,结果为true
6) a^b:叫逻辑异或,当a和b不同时,则结果为true,否则为false

3.3 &&和&基本规则

名称                       语法                        特点

短路与&&              条件1&&条件2          两个条件都为true,结果为true,否则false
逻辑与&                条件1&条件2             两个条件都为true,结果为true,否则false

案例:

 //&&短路与和&案例演示
intage=50;
 if(age>20&&age<90){
System.out.println("ok100");
 }
 //&逻辑与使用
if(age > 20 & age < 90) {
 System.out.println("ok200");
 }
 //区别
int a = 4;
 int b = 9;
 //对于&&短路与而言,如果第一个条件为false,后面的条件不再判断
//对于&逻辑与而言,如果第一个条件为false,后面的条件仍然会判断
if(a < 1 & ++b < 50) {
 System.out.println("ok300");
 }
 System.out.println("a=" + a + " b=" + b);// 4 10

3.4 && 和 & 使用区别

1) &&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
2) & 逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
3) 开发中,我们使用的基本是使用短路与&&,效率高

3.5 ||和|基本规则

名称                        语法                   特点

短路或||                条件1||条件2        两个条件中只要有一个成立,结果为true,否则为false
|逻辑或                条件1 | 条件2         只要有一个条件成立,结果为true,否则为false

案例演示:

 //||短路或和|逻辑或案例演示
//||规则:两个条件中只要有一个成立,结果为true,否则为false
 //|规则:两个条件中只要有一个成立,结果为true,否则为false
 intage=50;
 if(age>20||age<30){
 System.out.println("ok100");
 }
 //&逻辑与使用
if(age>20|age<30){
System.out.println("ok200");
 }
 //看看区别
//(1)||短路或:如果第一个条件为true,
//则第二个条件不会判断,最终结果为true,效率高
//(2)|逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低
inta=4;
 intb=9;
 if(a>1||++b>4){//可以换成|测试
System.out.println("ok300");
 }
 System.out.println("a="+a+"b="+b);//410

3.6 || 和 | 使用区别

1)  ||短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
2)  |逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低
3)  开发中,我们基本使用 ||

3.7 !取反基本规则

名称                    语法                特点

!非(取反)        !条件                如果条件本身成立,结果为false,否则为true

案例演示:

 //!操作是取反T->F ,F->T
 System.out.println(60>20);//T
 System.out.println(!(60>20));//F
 //a^b:叫逻辑异或,当a和b不同时,则结果为true,否则为false
 booleanb=(10>1)^(3>5);
 System.out.println("b="+b);//T

3.8  ^案例演示

a^b: 叫逻辑异或,当a和b不同时,则结果为true,否则为false

4. 赋值运算符

4.1 介绍

基本赋值运算符 = inta=10;
复合赋值运算符:
+= ,-= ,*= , /= ,%= 等 , 重点讲解一个 += ,其它的使用是一个道理
a += b; [等价 a=a+b;]         a-= b; [等价 a=a-b;]

4.2 赋值运算符特点

1) 运算顺序从右往左 int num= a+b+c;
2) 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值
        int num = 20; int num2= 78 * 34- 10; int num3 = a;
3) 复合赋值运算符等价于下面的效果 比如:a+=3;等价于a=a+3; 其他类推
4) 复合赋值运算符会进行类型转换。 byte b = 2; b+=3; b++;

 intn1=10;
 n1+=4;//n1=n1+4;
 System.out.println(n1);//14
 n1/=3;//n1=n1/3;//4
 System.out.println(n1);//4
 //复合赋值运算符会进行类型转换
byteb=3;
 b+=2;//等价b=(byte)(b+2);
 b++;//b=(byte)(b+1);

5. 三元运算符

5.1 基本语法

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

运算规则:
1. 如果条件表达式为true,运算后的结果是表达式1;
2. 如果条件表达式为false,运算后的结果是表达式2;

案例:

inta=10;
 intb=99;
 //解读
//1.a>b为false
 //2.返回b--,先返回b的值,然后在b-1
 //3.返回的结果是99
 intresult=a>b?a++:b--;
 System.out.println("result="+result);
 System.out.println("a="+a);
 System.out.println("b="+b);

5.2 使用细节

1) 表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换)
2) 三元运算符可以转成if--else语句

 //表达式1和表达式2要为可以赋给接收变量的类型
//(或可以自动转换/或者强制转换)
 int a=3;
 int b=8;
 int c=a>b?(int)1.1:(int)3.4;//可以的
doubled=a>b?a:b+3;//可以的,满足int->double

6. 运算符优先级

1)  运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
2)  只有单目运算符、赋值运算符是从右向左运算的。

7. 标识符的命名规则和规范

标识符的命名规则(必须遵守)
1. 由26个英文字母大小写,0-9,或$组成
2. 数字不可以开头。int 3ab = 1; //错误
3. 不可以使用关键字和保留字,但能包含关键字和保留字。
4. Java中严格区分大小写,长度无限制。int totalNum = 10; int n = 90;
5. 标识符不能包含空格。int a b = 90;

7.1 标识符命名规范[更加专业]

1)  包名:多单词组成时所有字母都小写:aaa.bbb.ccc//比如 com.zak.crm
2)  类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz[大驼峰] 比如: TankShotGame
3)  变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [小 驼峰, 简称 驼峰法] 比如: tankShotGame
4)  常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ 比如 :定义一个所得税率 TAX_RATE
5)  后面我们学习到 类,包,接口,等时,我们的命名规范要这样遵守,更加详细的看文档.

8. 关键字

定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小

9. 保留字

9.1 介绍

Java 保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const

10. 键盘输入语句

10.1 介绍

        在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java, 需要一个 扫描器(对象), 就是Scanner

10.2 步骤 :

1)  导入该类的所在包, java.util.*
2)  创建该类对象(声明变量)
3)  调用里面的功能

案例:
要求:可以从控制台接收用户信息,【姓名,年龄,薪水】

import java.util.Scanner;//表示把 java.util 下的 Scanner 类导入
public class Input {
 //编写一个main方法
public static void main(String[] args) {
 //演示接受用户的输入
//步骤
//Scanner 类 表示 简单文本扫描器,在java.util 包
//1. 引入/导入 Scanner 类所在的包
//2. 创建 Scanner 对象 ,new 创建一个对象,体会
//
 myScanner 就是 Scanner 类的对象
Scanner myScanner = new Scanner(System.in);
 //3. 接收用户输入了, 使用 相关的方法
System.out.println("请输入名字");
 //当程序执行到 next 方法时,会等待用户输入~~~
 String name = myScanner.next(); //接收用户输入字符串
System.out.println("请输入年龄");
 int age = myScanner.nextInt(); //接收用户输入 int
 System.out.println("请输入薪水");
 double sal = myScanner.nextDouble(); //接收用户输入 double
 System.out.println("人的信息如下:");
System.out.println("名字="+name
 +"年龄="+age+"薪水="+sal);
 }}

11. 进制(程序员的基本功)

11.1 进制介绍

对于整数,有四种表示方式:
二进制:0,1,满2进1.以0b或0B开头。
十进制:0-9,满10进1。
八进制:0-7,满8进1.以数字0开头表示。
十六进制:0-9及A(10)-F(15),满16进1.以0x或0X开头表示。此处的A-F不区分大小写。

举例:

//n1二进制
intn1=0b1010;
 //n210进制
intn2=1010;
 //n38进制
int n3 = 01010;
 //n4 16 进制
int n4 = 0X10101;
 System.out.println("n1=" + n1);
 System.out.println("n2=" + n2);
 System.out.println("n3=" + n3);
 System.out.println("n4=" + n4);
 System.out.println(0x23A);

11.2 二进制转换成十进制示例

11.3 八进制转换成十进制示例

11.4 十六进制转换成十进制示例

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
案例:请将 0x23A 转成十进制的数 0x23A= 10 * 16^0 + 3 *16^1+2*16^2=10+48+512=570

11.5 十进制转换成二进制

规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
案例:请将 34 转成二进制   =0B 00100010

11.6 十进制转换成八进制

规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。 案例:请将 131 转成八进制  =>0203

11.7 十进制转换成十六进制

规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
案例:请将 237 转成十六进制 =>0xED

11.8 二进制转换成八进制

规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
案例:请将 ob11010101 转成八进制  ob11(3)010(2)101(5) => 0325

11.9 二进制转换成十六进制

规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
案例:请将 ob11010101 转成十六进制  ob1101(D)0101(5) = 0xD5

11.10 八进制转换成二进制

规则:将八进制数每1位,转成对应的一个3位的二进制数即可。
案例:请将 0237 转成二进制 02(010)3(011)7(111) = 0b10011111

11.11 十六进制转换成二进制

规则:将十六进制数每1位,转成对应的4位的一个二进制数即可。
案例:请将 0x23B 转成二进制  0x2(0010)3(0011)B(1011) = 0b001000111011

12. 位运算的思考题

//  1) 请看下面的代码段,回答a,b,c,d,e结果是多少?
int a=1>>2; // 1 向右位移2位
int b=-1>>2;//算术右移
int c=1<<2;//算术左移
int d=-1<<2;//
 int e=3>>>2;//无符号右移
//a,b,c,d,e 结果是多少
System.out.println("a="+a);
 System.out.println("b="+b);
 System.out.println("c="+c);
 System.out.println("d="+d);
 System.out.println("e="+e);

//2) 请回答在java中,下面的表达式运算的结果是:(位操作)
~2=? // 按位取反
2&3=?// 2 按位与3
 2|3=?
 ~-5=?
 13&7=?
 5|4=?-3^3=?//^ 按位异或

13. 二进制在运算中的说明

1. 二进制是逢2进位的进位制,0、1是基本算符。
2. 现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary) 数用0和1两个数字及其组合来表示任何数。进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。

14. 原码、反码、补码(重点 难点)

1. 二进制的最高位是符号位:0表示正数,1表示负数
2. 正数的原码,反码,补码都一样(三码合一)
3. 负数的反码 = 它的原码符号位不变,其它位取反(0->1,1->0)
4. 负数的补码 = 它的反码+1,负数的反码 = 负数的补码 -1
5. 0的反码,补码都是0
6. java没有无符号数,换言之,java中的数都是有符号的
7. 在计算机运算的时候,都是以补码的方式来运算的
8. 当我们看运算结果的时候,要看他的原码(重点)

15. 位运算符

java 中有 7 个位运算( &、|、^、~、>>、>> )

还有3个位运算符 >>、>>, 运算规则:

1)  算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
2)  算术左移 <<: 符号位不变,低位补0
3)  >>> 逻辑右移也叫无符号右移,运算规则是: 低位溢出,高位补 0
4)  特别说明:没有 <<< 符号

应用案例:

1)  int a=1>>2;  //1 => 00000001 => 00000000 本质 1 / 2 /2 =0
2) int c=1<<2;  //1 =>  00000001 => 00000100 本质 1 * 2 * 2 = 4

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值