#大数据学习笔记第3天# 运算符

## 回顾
1. 什么是关键字?java中的关键字的特点是什么?
2. 什么是标识符?标识符有哪些组成规则?
3. 什么是字面量常量?
4. Java中字面量常量有哪几种?
5. 十进制、二进制、八进制、十六进制之间的转换。
6. 如何求一个负数的表现形式?
7. 定义变量的两种格式。
8. Java中基本数据类型有哪些?各占用几个字节?
9. 什么是变量的作用域?
10. 显式类型转换的格式。

### 答案
1. 答:Java语言中已经被赋予特定意义的一些单词,不可以把这些字作为标识符来使用。特点:关键字全部使用小写字母。

2. 答:标识符可以简单地理解为一个名字,用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。标识符由任意顺序的字母、下划线、美元符号和数字组成,并且第一个字符不能是数字。标识符不能死Java中的保留关键字。

3. 答:在程序运行过程中一直不会改变的量称为常量,通常也称为“final变量”。常量在整个程序中只能被赋值一次。在为所有的对象共享值时,常量是非常有用的。

final 数据类型 常量名称[=值];

常量名通常使用大写字母,但并非是必须的,只是一种约定成熟的规定。

4. 答:字面常量分为:整型、布尔、浮点型、字符型、字符串、null。

5. 答:十进制转二进制,基数为2,转八进制基数为8,转十六进制基数为16;二进制转十进制:2^0, 2^1….;

6. 答:负数的规律。从右往左,遇到第1个1,往右原样,往左取反。

7. 答:方法1:数据类型 变量名=初值; 方法2:数据类型 变量名; 变量名=初值;

8. 答:基本数据类型:整型(byte[1], short[2], int[4], long[8])、浮点型(float[4], double[8])、字符型(char[2])、布尔型(boolean[1])。

9. 答:{}内的变量称为局部变量。局部变量只在当前代码块中有效。

10. 答:(byte,short,char)->int->long->float->double

## 思考题

## 第一节课
– 回顾
– 思考题
– 算术运算符

## 第二节课
– 赋值运算符
– 比较运算符
– 逻辑运算符

## 第三节课
– 位运算符
– 按位与按位或、异或操作
– 移位运算规律
– 三元运算符

## 第四节课
– 分支结构
– 从键盘录入数据
– 判断正负

## 运算符分类
– 算术运算符
– 赋值运算符
– 比较运算符
– 逻辑运算符
– 位运算符
– 三元运算符

### 算术运算符

### ++和–:
– 自加 (++)
– 放在变量前:先自增,再使用
– 放在变量后:先使用,再自增
– 自减 (–)
– 放在变量前:先自减,再使用
– 放在变量后:先使用,再自减

注意:只能对变量使用。

字符串参与运算:

1. 两个操作数都是字符串;
2. 一个字符串一个变量;
3. 多个操作数;

“+”除了字符串相拼接功能外,还能把非字符串转换成字符串,加空串即可。 String s = 5 + “”;

思考题:

Select Code
1
2
System.out.println("5+5="+5+5);	//5+5=55
System.out.println(5+5+"hello"); //10hello

### 算术运算符注意事项:
– 除法操作两个操作数是整数时,结果也是整数,余数部分舍弃;
– %操作获得的是除法操作的余数;%结果的符号取决于被模数,即%前面的数的符号决定了结果的正负。

实例:

Select Code
1
2
int x=3500;
System.out.println(x/1000*1000);	//3000

## 赋值运算符
– 符号:=,+=,-=,`*=`,/=,%=
– 左侧为变量,右侧为字面量,或变量,或表达式;

示例:

支持连续赋值:int a=b=c; a=b=c=3;
int a = 3; a += 5; // 等同于运算 a = a + 5;
扩展:+=,-=,`*=`,/=,%= 自动做强制类型转换。

Select Code
1
2
3
4
5
6
7
8
public class Demo{
	public static void main(String[] args){
		short s=5;
		//s = s + 5;	//错误: 不兼容的类型: 从int转换到short可能会有损失
		s+=5;	//+=运算符会强制类型转换,等同于 s+(short)5
		System.out.println(s);	//10
	}
}

## 比较运算符
– 操作数是常量、变量或表达式;
– 比较运算符的结果是boolean型,要么是true,要么是false,常用作条件判断。
– 比较运算符”==”不能写成”=”;

## 逻辑运算符
– 与:两个条件都是true才是true;
– 或:只要有一个条件是true就是true;
– 异或:两个操作数不一样,才是true;
– 短路与,短路或:在左侧的操作数决定整个表达式的值的时候,右侧的表达式不进行运算;

### 逻辑运算符小结:
– 逻辑运算符的操作数都是布尔型表达式;
– “&”和”&&”(短路与)的区别
– 单&时,左边无论真假,右边都进行运算;
– 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算;
– 或”|”与”||”(短路或)同理,左边为真时,右边不参与运算;

总结:只有在右边需要运算时,才参与运算;

异或(^)与或(|)的区别:异或求的是异;或只需要一个为true结果就为true。

## 位操作符

## 三元运算符
(条件表达式)?表达式1:表达式2;

– 如果条件为true,整个表达式结果是表达式1;
– 如果条件为false,整个表达式结果是表达式2;
– 通常两个表达式同类型;
– 三元表达式整体是有值的,也就是说,它不能单独使用;要么直接打印,要么赋值;

### 示例:获取两个数中的最大值。

Select Code
1
2
int x=3, y=4;
int max = (x>y)?x:y;	//变量max存储的就是两个数的大数

## 程序流程控制
– 顺序结构
– 分支结构(选择结构) if, switch
– 循环结构(while, do…while, for)

### 程序流程控制
顺序结构:语句按照顺序依次执行,单纯的顺序结构的程序基本不存在。大型的程序从宏观上来看的话,各个模块之间也是呈现顺序结构。

### 分支结构:if
分支结构也称为选择结构,程序根据条件表达式的值来决定程序的走向。

Select Code
1
2
3
4
5
if(条件表达式)
{
	语句体;
}
...//其他语句

### 分支结构:if-else

Select Code
1
2
3
4
5
6
if(条件表达式){
	语句体1;
}else{
	语句体2;
}
...//其他语句

if语句注意事项:

– if后的括号内一定是布尔值或布尔表达式;
– 第二种格式与三元运算符的区别:三元运算符运算完要有值出现,并且可以写在其他表达式中;
– if的语句块中可以加多条语句,实现更复杂的逻辑
– if/else后边的大括号可以省略,此时if语句只能控制到另一个分号结束;如果有多条语句的话,不能省略;建议不要省略大括号;

### 分支结构:if-else if

Select Code
1
2
3
4
5
6
7
8
9
10
11
if(条件表达式1){
	语句体1;
}elseif(条件表达式2){
	语句体2;
}elseif(条件表达式3){
	语句体3;
}
...
else{
	语句体n;
}

### 分支结构:if-else练习
如何接收从键盘录入数据?

Select Code
1
2
3
import java.util.Scanner;
Scanner s=new Scanner(System.in);
s.nextInt();	//获取int值,用s.next()获取字符串

### 练习
1. 从键盘录入数据,使用程序判断正负;

2. 从键盘录入整数作为成绩,根据成绩显示提示:

– 60分以下显示“不及格”
– 60-79分显示“及格”
– 80-99分显示“优秀”
– 100分显示“满分”

3. 改进前面的程序,增加对非法成绩的处理;

4. 从键盘输入两个数,显示其中最大值,要求使用if-else结构

5. 从键盘输入三个数,显示其中最大值,要求使用if-else和三元表达式两种方式实现