**
1.基本运算符
**
在java当中,使用运算符+、-、*、/ 表示加减乘除,当参与 / 运算的两个操作数都是整数的时候,表示整数除法;否则表示浮点数。整数的求余操作用 % 表示。
System.out.println(5 / 2); // 2
System.out.println(8/0); // by zero 错误
System.out.println(浮点数/0); // INFINITY
System.out.println(5%2); // 1
System.out.println(5.0/2); // 2.5
System.out.println(3+9*8.0/2%2); // 3.0
System.out.println((3+9)*8.0/2%2); // 0.0
2.数值之间的转化
在程序运行的时候,我们经常需要将一种数值类型转化为另一种数值类型。
3.强制类型转换
有时候也需要将double转化为int.。在java当中允许这种数值之间的类型转化。当然也会有以一些数据丢失。在这样情况之下,需要通过强制类型转换实现这个操作,强制类型的语法格式是通过()当中给出的想要转化的目标类型。
public static void main(String[] args) {
double dou_num = 10.15;
int numn = (int) dou_num;
}
4.自增和自减运算符:
++m:先加再赋值,m++;先赋值再加
自增和自减的过程就是一个值交换和值存储的流程,内存中值存储和值交换不在一个地方,值交换会产生一个临时副本空间(备份)
m++中是先把临时的副本赋值给m本身,再让备份自增
++m:是先自增临时副本空间后,在讲副本传给a本身
public static void main(String[] args) {
int m = 10;
int n = 10;
int a = ++m;
int b = n++;
System.out.println(a);
//a的值输出为11
System.out.println(b);
//b的值输出为10
}
5.关系和boolean运算符
①:检测相等性: ==
②:检测不等:!=
③:最后,还有经常使用的<、>、<=和>=
6.逻辑运算符
(1)与运算(&&):先后两个条件都为True时才执行;
(2)或运算(||):只要有一个为True时就可以执行
7.三目运算符(?😃:
a < b ? 0 : 1;
//如果a<b那么返回0,如果a>b那么返回1
8.位运算
(以byte举例)按位与、或、反、异或运算
(1)按位与运算(&):两个二进制数的每一位相对应,每对都为1 是1,否则为0;
如 10:00001010
12:00001100
结果: 00001000 转换为十进制为8;
(2)按位或运算(|):两个二进制的每一位相对应,每对都为0 是 0,否则为1;
如 10:00001010
12:00001100
00001110 转换为十进制为14;
(3)按位取反运算(~):按位取反, 1变0,0变1
(4)按位异或运算(^):两个二进制的每一位相对应,每对相同为0,不同为1;
如 10:00001010
12:00001100
00000111 转换为十进制为7;
9.移位运算:
包括 :左移运算(<<)、右移运算(>>)、无符号右移运算(>>>)
(1)左移运算(<<):从右往左推,要计算X左移N位,则后面补N个0,前面超过8位的都去掉
如,-8=11111000(补码) -8左移2位: -8<<2=11100000(补码) 将原码算出去,转换为十进制结果为-32
-12=11110100(补码) -12左移3位: -12<<3=10100000(补码) 结果为-96
发现,左移运算最后的结果是 要左移的这个数X2的N次方; -32=-82的2次方; -96=-122的3次方
这就相当于一个乘法运算,并且, 在乘法中,左移运算的时间是最快的
如,普通运算:216 和左移运算:2<<4,左移运算比普通运算快的多(不是一个量级的)
(2)有符号位右移运算(>>):从左往右推;这个数X/2的N次方;左边空出来的位用0或1填补(正数用0,负数用1)
如,-8=11111000(补码) -8右移2位 -8>>2=11111110(补码) 结果为-2;
(3)无符号右移(>>>):从左往右推,空位一律用0填补(先记住),以后哈希扩容用;