目录
1.按位与&:如果 两个二进制为都为1,结果为1,否则为0;
4.按位异或^:如果两个数字二进制位相同,结果为0,不同结果为1
2.右移<<:最右侧不要了,最左侧补符号位(正数补0,负数补1);
什么是运算符?
运算符是编程语言中用于执行各种操作的特殊符号或关键字。用于处理变量和值,执行数字计算、逻辑运算符、位运算和其他操作,以便编写复杂的程序
运算符主要分类
算术运算符
1. 基本四则运算符:加减乘除模(+-*/%)
public class Test_0522 {
public static void main(String[] args) {
int a=2;
int b=4;
System.out.println(a+b);//6
System.out.println(a-b);//-2
System.out.println(a*b);//8
System.out.println(a/b);//0
System.out.println(a%b);//2
/* %和/的运算 */
int c=3;
int f=7;
double d=4.5;
System.out.println(f/c);//2 整形/整形的结果为整形,及时计算结果包含小数,也会抹去小数
System.out.println(d%c);//1.5 java中不仅能对整数取模还能对小数取模
System.out.println(d/c);//1.5 整形与双精度浮点型的计算,会先将整形进行自动转换(隐式)将int—>double,在进行计算
/*关于0的位置*/
// System.out.println(a/0); 0不可以作为被除数,编译器无法得出结果
System.out.println(0/a);//0 0可以作为除数,得出结果都为0
//System.out.println(a%0); 0不可以作为被模数,编译器无法得出结果
System.out.println(0%a);//0 0可以作为模数,得出结果都为0
}
}
- 四则基本运算符都是二元运算符,使用时必须要有左右两个操作符 ;
- 整形/整形结果还是整形,即使计算结果是小数,也会抹去小数 ;
- %取模不仅能对整数,也能对小数取模;
- %取模和/除法中,0不可以作为右操作符,编译器无法得出结果;
- %取模和/除法中,0可以作为左操作符,但结果都为0。
2.增量运算符:+=、-=、*=、%=
public class Test {
public static void main(String[] args) {
int a=4;
a+=1;//相当于a=a+1
System.out.println(a);//5
a-=1;//相当于a=a-1
System.out.println(a);//4
a*=2;//相当于a=a*2
System.out.println(a);//8
a%=2;//相当于a=a%2
System.out.println(a);//0
}
- 注意:只有变量才能使用该操作符,常量不能使用
3.自增/自减运算符: ++/--
- 自增++:给变量加1;
- 自减--:给变量减1 ;
public static void main(String[] args) {
int a=2;
a++;//后置++,表示给a值加上1
System.out.println(a);//3
a=2;
++a;//前置++,表示给a值加上1
System.out.println(a);//3 单独使用时,前置++与后置++没有区别,a本身都会++
a=2;
a--;//后置--,表示给a值减上1
System.out.println(a);//1
a=2;
--a;//后置--,表示给a值减上1
System.out.println(a);//1 单独使用时,前置--与后置--没有区别,a本身都会--
a=2;
System.out.println(a++);//2 后置++,先使用变量原来的值后,表示式结束时给变量加1
System.out.println(++a);//4 前置++,先给变量加1后,在使用变量加1后的值
System.out.println(a--);//4 同理,后置--,先使用变量原来的值后,表示式结束时给变量减1
System.out.println(--a);//2 前置++,先给变量减1后,在使用变量减1后的值
}
- 单独使用时,前置++与后置++,没有区别,变量本身都会++;
- 混合使用时,前置++:变量先++,在使用变量++后的值,前置-- 同理;
- 混合使用时,后置++:变量原本的值先使用,在进行变量的++,后置-- 同理 。
- 只有变量才能使用自增/自减运算符,常量不可以。
关系运算符
关系运算符主要有6个:==、!=、<、>、<=、>=
其计算结果是true或false
public static void main(String[] args) {
System.out.println(2==3);//false
System.out.println(2!=3);//true
System.out.println(2<3);//true
System.out.println(2>3);//false
System.out.println(2<=3);//true
System.out.println(2>=3);//false
System.out.println(2.3<=3.0);//true 浮点型
System.out.println('a'=='a');//true 字符型
System.out.println(true==true);//true 布尔型
}
- 关系运算符可以不仅可以运用于整型,其他基本数据类型同样可以使用;
- 当有多个数据进行比较时,不可以连着写,如,1<2<3.需要运用到逻辑运算符;
- 其中布尔类型的使用只能为==或者!=,其他关系运算符不可以使用,否则编译器报错。
逻辑运算符
1.逻辑与 &&
语法规则:
表达式1 && 表达式2
public static void main(String[] args) {
System.out.println(1<=2&&2<3);//true 全真为真
System.out.println(1.2>=2&&2<3);//false 左假右真为假
System.out.println(1<=2&&2>3);//false 右假左真为假
System.out.println('b'>='a'&&2>3);//false 全假为假
}
- 左右两边的表达式结果需要为布尔类型,也就是true或者false ;
- 左右两边的表达式的类型可以不同;
- 结果遵循:全真(true)则为真(true),有假(false)则假(false)。
2.逻辑或 ||
语法规则:
表达式1 || 表达式2
public static void main(String[] args) {
System.out.println(1<=2 || 2<=3);//true 全真为真
System.out.println(1>=2 || 2<=3);//true 左假右真为真
System.out.println(1<=2 || 2<=3);//true 左真右假为真
System.out.println(1>=2 || 2>=3);//false 全假为假
}
- 左右表达式的结果需要为布尔类型(true或者false),也就是需要运用到关系表达式;
- 结果遵循:有真(true)则为真(true),全假(false)则为假(false)
3.逻辑非 !
语法规则:
!表达式
public static void main(String[] args) {
System.out.println(!(2==1));//2==1为假 !表相反,即结果为真
System.out.println(!(2==2));//2==2为真 !表相反,即结果为假
}
- 逻辑与中写的表达式要加上括号();
- 结果遵循:与表达式的结果相反 。
短路求值:
逻辑与&&与逻辑||遵守短路求值规则:
public static void main(String[] args) {
//我们可以知道0不能作为被除数,否则编译器报错,但下面代码可以正常运行说明1/0没有被真正求值
System.out.println(1>2 && 1/0==0);//false
System.out.println(1<2 || 1/0==0);//true
}
- &&结果遵循为全真才为真,有一假即假,所以程序计算左表达式的结果为假(false),那么结果就是假(false)的,无需再看右表达式的结果;
- ||结果遵循有一真即为真,全假为假,所以程序计算左表达式的结果为真(true),那么结果就是真(true),无需再看右表达式得结果;
位运算符
位运算符主要有四个:&、| 、~、^
- 其中~是一元,其他都是二元运算符
- 位操作是按二进制位来运算的
1.按位与&:如果 两个二进制为都为1,结果为1,否则为0;
public static void main(String[] args) {
int a=1;// 二进制:001
int b=2;// 二进制:010
System.out.println(a&b);//0 000
}
- 如果操作数是boolean类型,&按逻辑运算,也就是有一个假就是假
2. 按位或|:如果二进制位都为0,结果为0,否则为1;
public static void main(String[] args) {
int a=1;// 001
int b=2;// 010
System.out.println(a|b);//3 011
}
- 如果操作数是boolean类型,|按逻辑运算,也就是有一个真就是真
3.按位取反~:如果该为1转为0,如果为0转为1;
- ~是一元操作符
public static void main(String[] args) {
int a=1;// 001
System.out.println(~a);//-2 110
}
4.按位异或^:如果两个数字二进制位相同,结果为0,不同结果为1
public static void main(String[] args) {
int a=1;// 001
int b=2;// 010
System.out.println(a^b);//3 011
}
- 规律:n^n=0 n^0=0;
移位运算符
移位运算符有三个(<< 、>> 、>>>) ,都是二元操作符,按二进制比特位运算
1.左移<<:把最左侧的数字去掉右侧补0;
public static void main(String[] args) {
int a=15;// 0000 1111
System.out.println(a<<1);//30 0001 1110
System.out.println(a<<2);//60 0011 1100
}
- 每左移一个比特位,结果变为原来的2倍;
- 左移去掉的是符号位,所以正数可能变为负数;
2.右移<<:最右侧不要了,最左侧补符号位(正数补0,负数补1);
public static void main(String[] args) {
int a=16;// 0001 0000
System.out.println(a>>1);//8 0000 0100
System.out.println(a>>2);//4 0000 0010
}
- 每右移一个比特位,结果变为原来的1/2倍
3.无符号右移>>>:把最右侧的数字去掉,左侧补0;
public static void main(String[] args) {
int a=9;// 0000 1001
System.out.println(a>>>2);//表示向右移两个比特位,结果为2 0000 0010
}
- 没有无符号左移
条件运算符
条件运算符只有1个
表达式1?表达式2:表达式3
- 如果表达式1为真,结果为表达式2,否则为表达式3
public static void main(String[] args) {
int a=1;
int b=2;
System.out.println(a>b?1:2);//2 1>2结果为假,所以结果为表达式3,为2
}
- 表达式1的结果需要为布尔类型;
- 表达式2和表达式3的类型需要相同,除非可以进行隐式类型转换;
- 条件运算符不能单独使用,否则编译器会发生报错