目录
4.1. 按位与&:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
4.2. 按位或:如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
4.3. 按位取反~ :如果该位为 0 则转为 1, 如果该位为 1 则转为 0
4.4. 按位异或^:如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
各位小伙伴们,距离上一篇博客发布已经过去了10天。因为这几天学校的课比较多,一直没来得及更新。博主只能在周六周日写博客了。下面话不多说,开始今天的博客之旅。
一、算术运算符
1.1. 基本四则运算符:加减乘除模(+ - * / %)
public class Main{
public static void main(String[] args){
int a=20;
int b=10;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
System.out.println(a%b);
}
}
注意:int / int 结果还是int类型,而且会向下取整
int a = 3;
int b = 2;
System.out.println(a / b);
double d = a*1.0 / b;
System.out.println(d);
都是二元运算符,使用时必须要有左右两个操作数,且右操作数不能为0。
1.2. 增量运算符 += -= *= %=
此类操作符会将结果赋值给左操作数。
int a=2;
a+=2;//a=a+2
System.out.println(a);
int b=2;
b-=1;//b=b-1
System.out.println(b);
int c=2;
c*=3;//c=c*3
System.out.println(c);
int d=2;
d/=2;//d=d/2
System.out.println(d);
1.3. 自增++/自减--操作符
int a = 1;
a++;//后置++,表示给a的值加1,此时a的值为2
System.out.println(a++);//先使用变量原来值,表示式结束时给变量+1,所以打印出来的结果为2
System.out.println(a);//输出结果为3
++a;//前置++,表示给a的值+1
System.out.println(++a);//前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(a);// 输出5
相信很多小伙伴在学自增++/自减--操作符时,经常搞混。如果单独使用时,前置++和后置--没有区别;如果混合使用时,先+1,然后使用变量+1之后的值,后置++先使用变量原来的值,表达式 结束时给变量+1。
二、关系运算符
关系运算符主要有六个:
==:判断相等; !=:判断不相等; >,<,>=,<=,计算结果是true或false。
int a=1;
int b=2;
System.out.println(a==b);//false
System.out.println(a!=b);//true
System.out.println(a>b);//false
System.out.println(a<b);//true
System.out.println(a>=b);//false
System.out.println(a<=b);//true
需要多次判断时,不能连着写。
三、逻辑操作符
主要有三个&&,||,!,运算结果都是true和false。
3.1. &&
语法规则:表达式1&&表达式2,左右都是boolean类型。两个表达式都为真,结果才是真,只要有一个是假,结果就是假。
表达式1 | 表达式2 | 结果 |
真 | 真 | 真 |
假 | 真 | 假 |
真 | 假 | 假 |
假 | 假 | 假 |
int a=1;
int b=2;
System.out.println(a==1 && b==2);//左右都为真,结果为真
System.out.println(a==1 && b!=2);//右为假,结果为假
System.out.println(a!=1 && b==2);//左为假,结果为假
System.out.println(a!=1 && b!=2);//左右都为假,结果为假
3.2. ||
语法规则:表达式1 || 表达式2,表达式必须是boolean类型的结果。左右表达式只要有一边为真,结果就是真。
表达式1 | 表达式2 | 结果 |
真 | 真 | 真 |
真 | 假 | 真 |
假 | 真 | 真 |
假 | 假 | 假 |
int c=4;
int d=5;
System.out.println(c==4||d==5);//左右都为真,结果为真
System.out.println(c==4||d!=5);//左为真,结果为真
System.out.println(c!=4||d==5);//右为真,结果为真
System.out.println(c!=4||d!=5);//左右都为假,结果为假
3.3. 逻辑非!
语法规则:!表达式。真变假,假变真。
表达式 | 结果 |
真 | 假 |
假 | 真 |
int e=6;
System.out.println(!(e!=6));
System.out.println(!(e==6));
3.4. 短路求值
&&和||遵循短路求值原则
System.out.println(1>2&&1/0==0);
System.out.println(1>0||1/0==0);
我们可以看到编译器不会报错,这是因为&&左侧表达式为假,或||左侧表达式为真,无需计算右侧表达式。& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值。
System.out.println(1>2 & 1/0==0);
System.out.println(1>0 | 1/0==0);
此时程序会报错
四、位操作符
Java 中数据存储的最小单位是字节,而数据操作的最小单位是比特位. 字节是最小的存储单位,每个字节是由8个二 进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位 的每一位依次进行计算。
int a=10;
int b=20;
System.out.println(a&b);
System.out.println(a|b);
4.1. 按位与&:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
10的二进制是1010,20的二进制为0001 0100
10 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
20 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
& | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
此结果为0的二进制。
4.2. 按位或:如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
10 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
20 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |
结果为30的二进制。
4.3. 按位取反~ :如果该位为 0 则转为 1, 如果该位为 1 则转为 0
int c = 0xf;
System.out.printf("%x\n", ~c);
4.4. 按位异或^:如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
int e=0x1;
int f=0x2;
System.out.printf("%x\n",e^f);
如果两个数相同,则异或的结果为0。
五、条件运算符
只有一个 :表达式1?表达式2:表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值。
int a=1;
int b=2;
int min=a>b?b:a;
System.out.println(min);
表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换。表达式不能单独存在,其产生的结果必须要被使用。
六、 运算符的优先级
在一条表达式中,各个运算符可以混合起来进行运算,但是运算符的优先级不同,比如:* 和 / 的优先级要高于 + 和 - ,有些情况下稍不注意,可能就会造成很大的麻烦。运算符之间是有优先级的. 具体的规则我们不必记忆. 在可能存在歧义的代码中加上括号即可。