序
- 释义:用于表示数据的运算、赋值和比较的一系列符号我们称之为运算符。
- 分类
一、算术运算符
/**
* 算数运算符
* + - * / %
*
* ++ , --
* ++ : 自身+1 等同于 i = i +1;
* -- 同上
*
* i++ 和 ++i
* i++ : 先赋值 后+1
* ++i : 先+1 后赋值
*
* 优先级 : 单目>双目>三目
* 单目 : 就是指只有一个操作数, 比如 ++ 和 -- 就是单目
* 双目就是两个操作数 , 比如 1+2
*
*/
public class Operator_01 {
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println(a-b);
System.out.println(a+b);
System.out.println(a*b);
// 注意 结果类型,是运算中最高的类型
// 注意 a和b的类型 是 3 再+1.0 是 double类型的 4.0
System.out.println(a/b+1.0);
System.out.println(a%b);
// 0.30000000000000004 千万不要使用小数比较相等
System.out.println(0.1+0.2);
// ++ : 自增+1,把对应空间的值 拿出来,+1 再放回去
int s = 100;
// i++ : 先赋值 后+1
// ++i : 先+1 后赋值
s = s + s++;
System.out.println(s);
int w = 10;
w = w++ * w;
System.out.println(w);
int m = 10;
int e = 2 + m++;
System.out.println(e);
System.out.println(m);
int p = 2;
p = 2 + p++ + ++p + p++ + ++p;
//p = 2 + 2 + 4 + 4 + 6; p=6
System.out.println(p);
int x = 10;
x = 10 + x++ + ++x + (10*x++) + ++x;
//x = 10 + 10 + 12 + 120 + 14; x = 14
System.out.println(x);
}
}
二、比较运算符
/**
* 关系运算符
* 返回值是boolean类型 只有true和false
*
* > , >= , < , <= == , !=(不等于)
*
* == : 比较基本类型是比较值的大小 , 如果是比较引用类型,就比较内存地址
*
* == 是比较相等 而 = 是赋值
*
*/
public class Operator_02 {
public static void main(String[] args) {
int a = 10;
int b = 11;
System.out.println(a == b);
//false
System.out.println(a >= b);
//false
System.out.println(a > b);
//false
System.out.println(a <= b);
//true
System.out.println(a < b);
//true
System.out.println(a != b);
//true
}
}
三、 位运算符
、
/**
* 位运算符
* & : 位与 , 两边都是true,结果才是true
* | : 位或 , 两边一个是true,结果就是true
* ! : 位非 , 取反, !true
* ^ : 位异或 , 两边不一样,结果就是true
* ~ : 按位非, 0 的二进制是 : 0000 0000 , ~0 之后, 1111 111, 这是补码,补码-1 得到反码 1111 1110 , 原码 1000 0001 就是-1
*
* >> : 右移运算符(考虑符号位,再怎么移动,符号位不受影响),8 >> 2 = 2
* 转换为二进制 : 0000 1100 , 右移两位,向最左边+两个0(符号位之后),最右边,删除两位
* 正数 左边补0 , 负数 左边补1
* 右移几位 就等于 x / 2的n次方
*
* << : 左移运算符 , 同上取反,除变乘
*
* >>> : 右移运算符(不看符号位),只补0,不补1,正数不受影响,和 >> 一样,负数全变正数
* -1 >>> 1 : 001111 11
*
* 逻辑比较
* && : 且,短路与 , 和 & 一样,如果第一个是false,第二个就不执行了, 但是 & 第二个也会执行
* || : 或,短路或 , 如果第一个是true,第二个就不执行了, 但是 | 第二个会执行
*
*
* & : 两边也可以是数字,如果是数字 就是要进行 与运算
* 8 & 9 : 把8和9转换为二进制,然后每位比较,如果都是1 就取1,否则就是0, 结果不会超过两个数中最小的一个
*
*/
public class Operator_03 {
public static void main(String[] args) {
System.out.println(~10);
//-11
System.out.println(-12>>2);
// -3
System.out.println(-2<<2);
//-8
System.out.println(1 >>>2);
//0
// 0000 0011
// 0000 0101
// 0000 0001
System.out.println(3 & 5);
//1
System.out.println(true & true );
//true
System.out.println(true && true );
//true
System.out.println(true || false );
//true
System.out.println(true^true);
//false
System.out.println(!true);
//false
System.out.println(!(1<2));
//false
int a = 10;
int b = 11;
boolean flag = (a==b & a++>=b);
System.out.println(flag);
//false
System.out.println(a);
//11
}
}