Java运算符

Posted 凩子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java运算符相关的知识,希望对你有一定的参考价值。

首先来解释一下什么叫做运算符

对变量或常量进行操作的符号叫做运算符
组合起来即是表达式

文章目录

算术运算符

即最基本的 + - * / %
这些使用都比较简单,但要注意 / 和 % 的运用

System.out.println(3/2);
不是1.5,而是1,因为int/int得到的应该还是int

System.out.println((float)3/2);      1.5
System.out.println(3/(float)2);      1.5
只要有一个是浮点数答案就是浮点数
System.out.println((float)(3/2));    1.0
这是先算完得到1再转换为1.0
 

注意:除数不能为0,借着这个错误,我们来简单看看Java对出错时的描述,如果对异常感兴趣,我会在后面出一期关于异常的博客。

System.out.println(10%3);       1
10-3*3=1
System.out.println(10%-3);      1
10-(-3)*(-3)=1
System.out.println(-10%3);      -1
-10-(-3)*3=-1
System.out.println(-10%-3);     -1
-10-(-3)*3=-1
从以上式子可以看出余数符号只与前面的数的符号有关

System.out.println(12.5/3);      0.5
C语言中不能进行小数取余,但java可以

增量赋值运算符

即 += -= *= /= %=

int a=2;
a+=1等同于a=a+1
但是java中增量赋值运算符可以做到自动强制类型转换
例 short b=1;
   b=b+2;//这样写肯定会报警告,b+2后会整形提升,类型不匹配
   b+=a;//这样写就自动完成了强转
   += -= *=  /= %=被称为复合运算符,它们都可以帮我们进行一次强制类型转换

自增/自减运算符

即 ++ 、- -

前置++++后使用
后置++++先使用 --同理
int a=1;
int b=a++;
b=1,a=2

int a=1;
int b=++a;
b=2,a=2

a++;++a;
这时候就是a+1,没有区别

关系运算符

共有六个关系运算符:== 、 >= 、 <= 、 > 、 < 、 !=

int a=1,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);    true
System.out.println(a==b);    false

这些括号中的表达式均为布尔表达式,即结果要么是true,要么是false

逻辑运算符

&&叫做逻辑与(或短路与),||叫做逻辑或(或短路或),!叫逻辑非

布尔表达式1 && 布尔表达式2
只要有一个表达式为false,整个表达式就为false
如果表达式1为假,就不再执行表达式2
例 System.out.println(1>2 && 1/0);
上面已经说过0做除数会报错,那现在会报错吗?
不会,因为1>2为假,那就不会再进行1/0这个表达式了,屏幕上打印的仅有false
布尔表达式1 || 布尔表达式2 (C语言中表达式可以是其他类型)
只要有一个表达式为true,整个表达式就为true
如果表达式1为真,就不再执行表达式2
例 System.out.println(1<2 && 1/0);
这个结果呢?
跟上面一样因为1<2为真,那就不会再进行1/0这个表达式了,屏幕上打印的仅有true
!仍然是与布尔表达式相结合
!true == false
!false == true

C语言中表达式可以是其他类型,Java没有所谓的0为假,非零为真

不建议使用&(与)和 |(或),因为它们左右两边都要执行,不支持短路求值

System.out.println(1>2 & 1/0);
System.out.println(1<2 | 1/0);
这两个都会出现异常

位运算符

位运算符主要有四个:& | ^ ~

位操作表示按二进制位运算,计算机中都是使用二进制来表示数据的(01构成的序列),按位运算就是在按照二进制位的每一位依次进行计算

按位与&0000 1011 
      0000 0101
结果   0000 0001
对应位都是1才是1,其余均为0
按位或 |0000 1011 
      0000 0101
结果   0000 1111
对应位都是0才是0,其余均为1
按位异或 ^0000 1011 
      0000 0101
结果   0000 1110
对应位不同为1,相同为0
按位取反 ~0000 1011 
结果   1111 0100
0变成1,1变成0

移位运算符(了解即可)

移位运算符有三个:<< 、>> 、>>>(对补码使用)

左移运算符<<  相当于乘法,移n位,原数就乘2的n次方(右边补0)
0000 0110 <<1   6        0000 0110 <<2   6
0000 1100       12       0001 1000       24
右移运算符>>  相当于除法,移n位,原数就除2的n次方(左边补符号位)
0000 0110 >>1   6        0000 0110 >>2   6
0000 0011       3        0000 0001       1

注意:右移运算符对-1没有用(-1的补码为32个1,右移补得还是1,即还是-1)

无符号右移>>> 不管是不是负数,左边都补0
-1>>>1    右移后左边补0,成为非常大的正数(二进制为0后面311

注意:没有无符号左移运算符
由于计算机计算移位效率高于计算乘除,当某个代码正好乘除2的n次方的时候可以用移位运算代替。

三目运算符

布尔表达式 ? 表达式1:表达式2
执行逻辑:如果布尔表达式为真,则执行表达式1;如果布尔表达式为假,则执行表达式2

int a=1;
int b=2;
int max=a>b?a:b;
可以嵌套使用
int c=3;
max=c>(a>b?a:b)?c:a>b?a:b;

优先级

运算符之间有优先级,具体无需记忆,只需在可能会产生歧义的地方加括号

注释

  1. 文档注释
    一般用在方法和类的前面
    想设置这种每个class开头自动出现的文档注释点这个教你设置
  2. 块注释
多行注释
/*
hello
world
*/
  1. 行注释
// int a=0;

注意:注释内容应内容准确(代码与注释内容一致,及时更新注释),长短适中(不能太短,不便于他人理解;不能太长,不便于后人维护)。

以上是关于Java运算符的主要内容,如果未能解决你的问题,请参考以下文章

算数运算符

JAVA第二章数据类型与运算符

大数除法

java中整除和浮点除啥区别

java.运算符

python3运算符