JAVA学习——运算符

JAVA学习——运算符

一、运算符

1.介绍

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

2.运算符分类

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

二、算术运算符

1.介绍

算术运算符是对数值类型的变量进行运算的,在Java程序中使用的非常多。

2.算术运算符一览

运算符运算范例结果
+正号+77
-负号b=11;-b-11
+9+918
-10-82
*7*856
/9/91
%取模(取余)11%92
++自增(前):先运算后取值a=2;b=++aa=3;b=3
++自增(后):先取值后运算a=2;b=a++a=3;b=2
自减(前):先运算后取值a=2;b=–aa=1;b=1
自减(后):先取值后运算a=2;b=a–a=1;b=2
+字符串相加“hsp”+“edu”"hsp edu

3.算术运算符使用

① 除法(/)

System.out.println(10 / 4); 
//输出2,因为10和4都是int型数据,结果为int型
System.out.println(10.0 / 4);  
//输出2.5,因为10.0是double型,故结果为double型
double d = 10 / 4;
System.out.println(d);  
//输出2.0,因为10/4计算得int型结果2,然后将2转换为double型得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.5 % 3 = -10.5 - (int)(-10.5) / 3 * 3 = -10.5 - (-10) / 3 * 3 = -1.5

③ 自增(++)用法同自减(- -)

当独立使用自增符号是,i++和++i是一样的,都等价于i = i + 1
在表达式中使用时: 前++:先自增后赋值 后++:先赋值后自增

/*在表达式中使用时:
前++:先自增后赋值
后++:先赋值后自增
*/
int j = 8;
int k = j++;  // k = j;j = j + 1
System.out.println("k = " + k + "j = " + j)  // 结果:k = 8; j = 9
 
int x = 8;
int y = ++x;  //  x = x + 1;y = x;
System.out.println("y = " + y + "x = " + x)  // 结果:x = 9; y = 9

4.练习题

//内存分析法
int i = 1;
i = i++;//使用临时变量:(1) temp = i;(2)i = i + 1;(3)i = temp;
System.out.println(i);//输出1 
 
int x = 1;
x = ++x;//仍使用临时变量:(1)x = x + 1;(2)temp = x;(3)x = temp;
System.out.println(x);//输出2
//定义一个变量保存华氏温度,华氏温度转换为摄氏温度的公式为:5/9*(华氏温度-100)
//算出华氏温度对应的摄氏温度
double a = 234.5;
double b = 5.0 / 9 * (a - 100);
//注意是5.0不是5,因为int型的精度比较低,导致5/9最后的结果为0
System.out.println("对应的摄氏温度为" + b);

三、关系运算符(比较运算符)

1.介绍

关系运算符的结果都是布尔型,也就是结果要么为true,有么是false。
关系运算符经常用在if结构的条件中或循环结构的条件中。

2.关系运算符一览

运算符运算范例结果
==相等于8==7false
!=不等于8!=7true
<小于8<7false
>大于8>7true
<=小于等于8<=8false
>=大于等于8>=7true
instanceof检查是否是类的对象“hsp” instanceof Stringtrue

3.关系运算符使用

① 关系运算符的结果都是boolean型,true 或者 false。
② 关系运算符组成的表达式叫做关系表达式
③ 比较运算符“= =”不能误写成“=”。

四、逻辑运算符

1.介绍

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

2.逻辑运算符一览

1)短路与 &&,短路或 ||,取反!

2)逻辑与 &,逻辑或 |,逻辑异或 ^

aba&b(逻辑与)a&&b(短路与)a|b(逻辑或)a||b(短路或)!a(取反)a^b(逻辑异或)
truetruetruetruetruetruefalsefalse
truefalsefalsefalsetruetruefalsetrue
falsetruefalsefalsetruetruetruetrue
falsefalsefalsefalsefalsefalsetruefalse

3.运算规则

①a&b:& 叫逻辑与:规则:当a 和 b 同时为true,则结果为true,否则为false

②a&&b:&& 叫短路与:规则:当a 和b 同时为true ,则结果为true,否则为false

③alb:| 叫逻辑或,规则:当a 和b,有一个为true,则结果为true,否则为false

④al|b:|| 叫短路或,规则:当a 和b,有一个为true,则结果为true,否则为false

⑤!a:叫取反,或者非运算。当a 为true,则结果为false,当a为false是,结果为true

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

4.使用细节

① && 和 & 使用区别

&&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false。

&逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低。

在开发当中,一般都是用短路与&&,效率高。

② | | 和 | 使用区别

| | 短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高。

| 逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低。

在开发当中,一般都是用短路或| |,效率高。

五、赋值运算符

1.介绍

基本赋值运算符: =
复合赋值运算符:+ = ;- =;* =;/ =;%=

2.细节特点

(1)运算顺序从右往左。
(2)赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值。
(3)复合赋值运算符等价于下面的效果:a += 3==>a = a + 3。
(4)复合赋值运算符会进行类型转换。

byte b = 3;
b += 2; //等价于b = (byte)(b + 2);
b++; //等价于b = (byte)(b + 1);

六、三元运算符

1.基本语法

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

2.使用细节

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

if res = a > b ? a++;--b;  //等价于下面
if (a > b) 
	res = a++; 
else 
	res = --b;

练习题:求三个数中的最大值

int a = 10;
int b = 20;
int c = 30;
//方法一
int temp = a > b ? a : b;
int	lagest = temp > c ? temp : c;
System.out.println("a,b,c当中最数的是" + lagest);
//方法二,方法二会执行三次三元运算,故实际应用中更倾向于使用方法一
int	lagest = (a > b ? a : b) > c ? (a > b ? a : b) : c;
System.out.println("a,b,c当中最数的是" + lagest);

七、运算符优先级

1.规则表(优先级从高到低)

!](https://img-blog.csdnimg.cn/direct/f36bd838ed36401b9c5ed978bd6068f7.png)

2.梳理

1)只有单目运算符(第二行)和赋值运算符(最后一行)是从右向左运算的。

2)优先级从上到下依次减退。

①() {}等
②单目运行 + + - -
③算术运算符
④位移运算符
⑤比较运算符
⑥逻辑运算符
⑦三元运算符
⑧赋值运算符

八、标识符的命名规则和规范

1.标识符概念

(1)Java对各种变量、方法和类等命名时使用的字符序列称为标识符。

(2)凡是可以自己起名字的地方都叫标识符 int num1 = 90。

2.标识符的命名规则(规则是必须遵守)

(1)由26个英文字母大小写,0-9,_或$组成。

(2)数字不可以开头。

(3)不可以使用关键字和保留字,但是可以包含关键字和保留字。

(4)Java中严格区分大小写,长度无限制。

(5)标识符不能包含空格。

int a b = 35;//错误的命名方法,编译时会报错

3.标识符命名规范(规范是指这样做更专业)

(1)包名:多单词组成时所有字母都小写:aaa.bbb.ccc
比如com.hsp.crm

(2)类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz[大驼峰]
比如:TankShotGame

(3)变量名、方法名:多单词组成是,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz[小驼峰,简称 驼峰法]
比如:tankShotGame

(4)常量名:所有字母都大写。多单词时,每个单词都用下划线链接:XXX_YYY_ZZZ
比如:TAX_RATE

(5)其他的规范之后补充。

4.Java中的关键字

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

在这里插入图片描述

在这里插入图片描述

5.Java中的保留字

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

九、键盘输入语句

1.介绍

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

2.步骤

(1)导入该类的所在包,java.util.* (*在此为Scanner)。

(2)创建该类对象(声明变量)。

(3)调用里面的功能。

/*案例演示:
要求:可以从控制台接收用户信息【姓名、年龄、薪水】
*/
//第一步:首先引入Scanner所在的包,Scanner类是一个简单的文本扫描器
import java.util.Scanner;//表示把java.util这个包下的Scanner类导入
public class Input {
	public static void main(String[] args){
		//第二步:创建Scanner对象,oneScanner是Scanner类的一个对象
		Scanner oneScanner = new Scanner(System.in);
		//第三步:使用相关的方法接受用户的输入
		System.out.println("请输入姓名:");
		String name = oneScanner.next();//.next()就是接收用户输入字符串的方法
		//当执行到next方法时,会等待用户输入
		System.out.println("请输入性别:");
		String gender = oneScanner.next();
		System.out.println("请输入年龄:");
		int age = oneScanner.nextInt();//.nextInt()是接受一个int类型数据的方法
		System.out.println("请输入薪资:");
		double sal = oneScanner.nextDouble();//.nextDouble()是接受一个Double类型数据的方法
		System.out.println("姓名:" + name + " 性别:" + gender 
			+" 年龄:"+ age + " 薪资:" + sal);
	}
}

十、进制

1.介绍

对于整数,有四种表示方式:
1) 二进制BIN:0,1,满2进1,以0b或0B开头。(数字0加b或B)
2) 十进制DEC:0-9,满10进1。
3) 八进制OCT:0-7,满8进1,以数字0开头表示
4) 十六进制HEX:0-9及A(10)-F(15),满16进1,以0x或者0X开头表示,其中A-F不区分大小写。(数字0加x或X)

//举例说明:演示四种机制
int n1 = 0b1010;//二进制10
int n2 = 1010;//十进制1010
int n3 = 01010;//八进制520
int n4 = 0x1010;//十六进制65793

机制说明

2.十进制转二进制

规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
案例:将34转成二进制 = 0b0010010
在这里插入图片描述

3.十进制转八进制

规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。
案例:将131转成八进制 = 0203
在这里插入图片描述

4.十进制转十六进制

规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
案例:将237转成十六进制 = 0XED
在这里插入图片描述

5.二进制转换成八进制

规则:从低位开始,将二进制每三位一组,转成相应的八进制数即可。
案例:将0b11010101
在这里插入图片描述

6.二进制转换成十六进制

规则:从低位开始,将二进制每四位一组,转成相应的十六进制数即可。
案例:将0b11010101
在这里插入图片描述

7.八进制转二进制

规则:将八进制每一位数,转成对应的一个三位的二进制数即可。
案例:将0237转成二进制
在这里插入图片描述

8.十六进制转二进制

规则:将十六进制每一位数,转成对应的一个四位的二进制数即可。
案例:将0x23B转成二进制
在这里插入图片描述

9.二进制、八进制、十六进制转十进制

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2(或8或16)的(位数-1)次方,然后求和。

十一、原码、反码、补码(重难点)

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

注:补码让正数负数统一了

十二、位运算符

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

运算规则:

  1. 按位与&:两位全是1,结果为1,否则为0

  2. 按位或|:两位有一个是1,结果为1,否则为0

  3. 按位异或^:两位一个是1,一个是0,结果为1,否则为0(两个数要不一样才为1)

  4. 按位取反~:0变1,1变0

//计算2&3
//1. 先得到2的补码 => 2的原码00000000 00000000 00000000 00000010
// 2的补码(正数的三码合一) 00000000 00000000 00000000 00000010
//2. 得到3的原码和补码 00000000 00000000 00000000 00000011
//3. 按位与&(两位都为1时为1)
// 00000000 00000000 00000000 00000010
//4. 运算后的原码也是00000000 00000000 00000000 00000010(正数三码合一)
//5. 转换为二进制=>2
System.out.println(2&3);

//计算~-2
//1. 先得到-2的补码 => -2的原码10000000 00000000 00000000 00000010
// -2的反码(符号位不变,其余取反) 11111111 11111111 11111111 11111101
//2. 得到-2的补码(在反码的基础上加1)11111111 11111111 11111111 11111110 
//3. 按位取反(0变1 1变0)
// 00000000 00000000 00000000 00000001(这是运算后的补码)
//4. 运算后的原码也是00000000 00000000 00000000 00000001(正数三码合一)
//5. 转换为二进制=>1
System.out.println(~-2);
  1. 算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位(也就是说符号位如果为0就在左边位补0,如果符号位为1就在左边位补1)

  2. 算术左移<<:符号位不变,低位补0

  3. 逻辑右移(无符号右移)>>>:低位溢出,高位补0(注意:没有<<<符号)

int a = 1 >> 2;
//000000000 000000000 00000000 000000001
//最后两位01向右溢出,00000000 00000000 00000000 00000000
//本质是1/2/2=0
int c = 1 << 2;
//本质是1*2*2,结果为4

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值