Java中的运算符

1. 算术运算符
      1.1 基本四则运算符( + - * / % )
      1.2 增量赋值运算符( += -= *= /= %= )
      1.3 自增/自减运算符( ++ - - )
2. 关系运算符( == != > < >= <= )
3. 逻辑运算符( && || ! )
4. 位运算符( & | ~ ^ )
5. 移位运算( << >> >>>)
6. 条件运算符
7. 运算符的优先级

1. 算数运算符

1.1 基本四则运算符

+ - * / %
四则运算相对较简单,需要注意的是/ 和%

在Java中,int / int的结果仍是int类型,结果会自动省略小数点后的值,从而很有可能得到错误的结果。

int a = 1;
int b = 2;
System.out.println(a/b);	
//结果:
0

要得到正确的结果,需要使用double类型来运算。

double a = 1;
double b = 2;
System.out.println(a/b);	
//结果:
0.5

%为取余运算,其本质为:m%n=m - (int)(m/n)*n
即m / n后所得的余数。
注意:取余结果被模数(即上式中的m)的符号有关,m为负,则余值为负。
取余符号的适用范围:对于具有相同类型的两个变量,取余运算适用于除了boolean之外的所有基本数据类型。

1.2 增量赋值运算符

+= -= *= /= %=

int a = 1;
a += 1;
System.out.println(a);
//结果:
a=2

a += 1与a = a + 1等价,相当于将a+1赋值给a,要注意的是,+=是一个符号,中间不可以有空格,否则编译器会报错,其他增量赋值运算符与 +=同理。

1.3 自增/自减运算符

++ - -

int a = 1;
int b = ++a;
int c = a++;
System.out.println(b);
System.out.println(c);
//结果:
b=2.c=2

这表明,前置自增的返回值是自增前的值,后置自增的返回值是自增后的值,上式中++a属于后置自增,a自增后的值为2,将自增后的值赋值给b,而a++属于前置自增,先将a的值(a进行一次自增后的值为2)赋值给c,a再进行自增。
注:如果不取自增运算的返回值,则前置自增和后置自增没有区别

2. 关系运算符

== != > < >= <=
注意,Java中不可以进行关系运算符的连续使用,如a<b<c的写法是不允许的,正确写法是用逻辑运算符连接:b>a && b<c

所有关系运算符的表达式返回值都是boolean类型,如:

int a = 10; 
int b = 20; 
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

3. 逻辑运算符

逻辑运算符主要有3个: &&  ||   !
&&表示逻辑与
|| 表示逻辑或
!表示逻辑非

逻辑运算符的返回结果为boolean类型。

    对于A && B的运算,只有A和B的值都为true,则该表达式的值才为true,否则该表达式的值为false,值得注意的是,如果A为false,&&运算会直接结束并判定结果为false,并不会执行后面的表达式B。

    对于A || B的运算,只要A和B任一值为true,表达式的值就为true,即只有A和B都为false时 || 运算的值才为false,而如果A的值为true, || 运算也会直接结束并判定结果为true,并不会执行后面的表达式B。
    对于!运算,操作数的结果为false,非运算的结果为true,若操作数结果为true,非运算的结果为false
!是一个单目运算符,只有一个操作数,&&和 || 都是双目运算符,都有两个操作数。

4. 位运算符

位运算符主要有4个:& ! ~  ^
在Java中,对数据进行操作的最小单位不是字节,而是比特位。

    位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是按照二进制位的每一位依次进行计算。
按位与 & :
    如果两个二进制位都是1,则结果为1,否则结果为0

int a = 10; 
int b = 20; 
System.out.println(a & b); 
//结果:
0

对于上述运算,先将a和b转为二进制,分别为01010 和10100
请添加图片描述
显然,对每一位进行&运算都为0,所以结果为0

按位或 | :
如果两个二进制位都是0,则结果为0,否则结果为1

int a = 10; 
int b = 20; 
System.out.println(a | b); 
//结果:
30

对01010和10100进行按位或运算,结果为11110,转为十进制即为30

5. 移位运算

按位运算共3种: << >> >>> 
都是按照二进制位来运算。
左移 << :去掉最左侧位,最右侧补0
如:
0000 1011 <<1(左移 1 位)  0001 0110
0000 1011 <<2(左移 2 位)  0010 1100
左移相当于乘法,将上述式子转为10进制,即11左移1位结果为22,左移2位结果为44

右移 >> :去掉最右侧位,最左侧补符号位(正数补0,负数补1)
如:
0000 1011 >>1(右移 1 位)  0000 0101
0000 1011 >>2(右移 1 位)  0000 0010
右移相当于除法,将上述式子转为10进制,即11右移1位结果为5,右移2位结果为2(与整型变量之间的除法相同,去掉小数点及小数点之后的值)
无符号右移 >>> :去掉最右侧位,最左侧补0(与符号位无关)

注意:

  1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
  2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
  3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
  4. 移动负数位或者移位位数过大都没有意义.

6. 条件运算符

在Java中只有一个条件运算符:
表达式1 ? 表达式2 : 表达式3
当表达式1的值为true时,整个表达式的值等于表达式2的值;当表达式1的值为false时,整个表达式的值等于表达式3的值。
这是Java中的唯一一个三目运算符,时条件判断语句的简化写法。
如:

//求两个数之间的最大值
int a = 10;
int b = 20;
int max = a>b?a:b;
System.out.println(max);
//结果:
max=20

7. 运算符的优先级

例:

System.out.println(10 < 20 && 20 < 30);

对于上述代码,明显是先计算的 10 < 20 和 20 < 30, 再计算 &&. 否则 20 && 20 这样的操作是语法上有误的(&& 的操作数只能是boolean).

运算符之间是有优先级的.。具体的规则不必强行记忆, 在可能存在歧义的代码中加上括号即可。


The end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhanglf6699

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值