一.算数运算符(+ - * / %)
public class java27 {
public static void main(String[] args) {
//System.out.println(1/0);//error 报错
System.out.println(7%3);//1
System.out.println(7%-3);//1
System.out.println(-7%3);//-1
System.out.println(-7%-3);//-1
//也可以打印余数e
System.out.println(11.5/5);//2.3dd
}
}
二.增量运算符(+= -= *= %=)
public class java27 {
public static void main(String[] args) {
int a = 1;
a += 2;
System.out.println(a);//3
int i = 3;
long j = 10L;
i += j;
System.out.println(i);//13
//会报错吗? 没有
//为什么不是在之前说过大的范围不能给小的范围?所以可能发生截断或者整型提升。
//验证
byte aa = 1;
byte bb = 127;
aa += bb;
System.out.println(aa);//结果-128 所以发生了截断,如果为128说明整型提升了
}
}
三.关系运算符(结果只有true false)
public class java27 {
public static void main(String[] args) {
int a = 10;
int b = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false
}
}
四.逻辑运算符(&& || !)
(运算结果都是boolean类型)(双目操作符)
(1)逻辑与&&
表达式1&&表达式2(两个表达式必须是布尔表达式)(结果只有true false)。
如果表达式一个为假,则另一个不需要执行。
只有两个都为true,才为真。
(2)逻辑或 ||
表达式1&&表达式2(两个表达式必须是布尔表达式)(结果只有true false)。
只要有一个为真即为真。
一边为真,就不会执行第二个表达式即使第二个表达式为假。
(3)逻辑非 !
取非,非一定是个表达式 , 真变假,假变真。
a=4;
!(a>5)为true
(4)短路求值(&& 和 || 遵守短路求值的规则)
public class java27 {
public static void main(String[] args) {
int a = 10;
int b = 20;
//短路求值
//任何数/0都是会错误
System.out.println(a>b&&a/0==0);//false
System.out.println(a<b||a/0==0);//true
//不支持短路求值
System.out.println(a>b&a/0==0);//error
System.out.println(a<b|a/0==0);//error
}
}
五.位操作符(& | …^)
(1)按位与 &
只要有0结果为0,俩个同时为1才为1
00000101
10100010
00000000
用途:找一个数二进制位上有多少个1
(2)按位或 |
只要有一位是1就是
00000101
10100010
10100111
用途:找一个数二进制位上有多少个0
(3)按位异或 ^
就是找不同,不同才为1。
六.移位操作符
(1)左移 <<(向左侧移动,左侧移动的不要了,右侧补0)
public class java27 {
public static void main(String[] args) {
int a=0x10; //00001010 10
System.out.println(a<<1);//00010100 20
int b = a;
System.out.println(b<<1);//00101000 40
//每次左移1次2^1,2次2^2 n次2^n
}
}
(2)右移 >>(向右侧移动,右侧移动的不要了,左侧的补符号位 正0 负1)
无符号右移>>>(最右侧位不要了, 最左侧补 0)
public class java27 {
public static void main(String[] args) {
//右移正数
int a=0x20; //00010100 20
System.out.println(a>>1); //00001010 10
System.out.println(a>>2); //00000101 5
//正数右移n位 n次 2^(-n)
//右移负数
int b=-0x1;//因为是负数
//原码 10000001
//反码 11111110
//补码 11111111 补符号位
//>>1 1 1111111 1 还是原来的样子不遵循正数右移
//有一种右移 不是补符号位 补0
//01111111 叫做 >>>无符号右移指每次右移一位不管是正负都是补0,所以-1在向右移了之后变成非常大的正数
byte c=-1;
System.out.println( c>>> 1);//转刻变成一个很大的数2147483647
//为什么会这么大
//因为byte会整型提升Int
}
}
七.条件运算符(java中唯一的一个三目运算符)
表达式1?表达式2:表达式3(表达式1必须是布尔表达式也就是要么true要么false,为真则执 行表达式2,否则执行表达式3)
表达式不能单独存在,必须赋值给某一个变量,或者直接打印。
public class java27 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int max = a>b?a:b;
System.out.println(max);
boolean lean = true == true ? true : true == false ? true : false;
//找三个表达式呀 表达式1 表达式2 表达式3
//所以结果为true
System.out.println(lean);
boolean lag = true == false ? true : true == false ? true : false;
// 表达式1 false 表达式2 走表达式3((表达式1) 表达式2 走表达式3)
//所以结果为flase
System.out.println(lag);
}
}