Java运算符详解

目录

        前言

        算式运算符

        ⚙赋值运算符

        关系运算符

        逻辑运算符

        位运算符

        移位运算符

        条件运算符

        运算符优先级


前言

任何一个程序都离不开计算问题,运算符代表着表达式之间进行何种运算,所以我们要熟练掌握各种运算符的使用方法。

Java运算符详解_第1张图片

了解单目操作运算符、双目运算符、三目运算符

单目运算符:即运算符只对一个表示式执行操作,如a++...。

双目运算符:即运算符对两个表示式进行操作 a+=b。

三目运算符:即运算符对三个表示式进行操作true ? 6 : 8。

算式运算符

+、-、*、 /、 %

算式运算符也就是我们平常经常用到的,也比较简单,使用/和%有些是我们要小心的。

使用/号的注意事项

1.分母不能为0,否则会抛出异常,分子和分母都为整形时,得到的结果为也为整数。

2.当分子和分母都为整形数据时,得到的结果为也为整数。

Java运算符详解_第2张图片

 %(取模运算符)号的使用

Java运算符详解_第3张图片

Java运算符详解_第4张图片

总结:对于x%y,计算结果的正负与x有关。 

⚙赋值运算符

=、+=、-=、*=、/=、%=、^=、&=、|=、>>=、<<=,>>>=,++,--。

int a = 5;
a += 5;//相当于a = a+5
a *= 5;//相当于a = a*5
a /= 10/2;相当于a = a/(10/2)
a %= 2+3;相当于a = a%(2+3)
a++;//相当于a = a+1;
a--;//相对于a = a-1;
...

值得注意的一点就是。 

Java运算符详解_第5张图片

error:a是一个short类型的变量,小于四字节类型整形变量之间进行运算时,会先提升到int类型再参有运算。

right:赋值运算符运算时,会将计算的结果自动帮我们进行类型转换。

注意:前置++和后置++的区别,a++、++a。如果单独使用则没区别,都是使a自增。前置++a先使a自增,再使用a;后置++,先使用a,a再自增。

Java运算符详解_第6张图片

Java运算符详解_第7张图片

关系运算符

>、>=、<、<=、==、!=

int a = 10;
int b = 5;
System.out.println(a>b);//true
System.out.println(a=b);//true
System.out.println(a<=b);//false
System.out.println(a==b);//false
System.out.println(a!=b);//true

注意:关系运算符计算的最终结果是只有两个,true或false,通常称结果为true或false的表示式为布尔表示式。

逻辑运算符

&&、||、、!

&&(双与运算符):&&左右两边一定要是一个布尔表达式。

布尔表达式1 && 布尔表达式2

System.out.println(true && false);//false
System.out.println(false && true);//false
System.out.println(false && false);//false
System.out.println(true && true);//true

结论:布尔表示式1或布尔表示式2为假,则整体结果为假,布尔表达式1和布尔表示式2为真,则整体结果为真。

注意:&&运算时,若布尔表达式1为假,则不执行布尔表示式2,因此也称&&为短路与。

||(双或运算符):||左右两边一定要是一个布尔表达式。

布尔表达式1 || 布尔表达式2

System.out.println(true || false);//true
System.out.println(false || true);//true
System.out.println(false || false);//false
System.out.println(true || true);//true

结论 :布尔表示式1或布尔表示式2为真,则整体结果为真,布尔表达式1和布尔表示式2为假,则整体结果为假。

注意:若布尔表示式1为真则不执行表示式2,因此也称||为短路或。

 !(非运算符):!运算符是一个单目操作符,!的右边一定是一个布尔表示式

!布尔表示式
System.out.println(!true);//false
System.out.println(!false);//true

结论:如果布尔表示式为真,结果为真,如果布尔表示式为假,结果为真。 

位运算符

&、|、~,^

位运算符就是对数据的补码进行操作,&、|、^是双目运算符,表示式两边一定是个整数;~单目操作符,也表达式需要是整数。

&(按位与运算符):

int a = 6;
int b = -5;
int c = b&a;
a补码:
00000000 00000000 00000000 00000110
b补码
11111111 11111111 11111111 11111011
a&b
00000000 00000000 00000000 00000110
11111111 11111111 11111111 11111011  &
--------------------------------------
00000000 00000000 00000000 00000010
//按位与,一个为0则为0,两个为1则为1
//c=2

|(按位或运算符):

int a = 7;
int b = 12;
int c = b|a;
a补码:
00000000 00000000 00000000 00000111
b补码
00000000 00000000 00000000 00001100
a&b
00000000 00000000 00000000 00000111
00000000 00000000 00000000 00001100  &
--------------------------------------
00000000 00000000 00000000 00001111
//按位或,一个为1则为1,两个为0则为0
//c=15

~(按位取反运算符):

int a = 5;
int b = ~a;//-6
a补码:
00000000 00000000 00000000 00000101
~a得到的结果也为补码
11111111 11111111 11111111 11111010
~a反码
11111111 11111111 11111111 11111001
~a原码
10000000 00000000 00000000 00000110

^(按位异或运算符:

int a = 70;
int b = 12;
int c = b^a;
a补码:
00000000 00000000 00000000 01000110
b补码
00000000 00000000 00000000 00001100
a&b
00000000 00000000 00000000 01000110
00000000 00000000 00000000 00001100  &
--------------------------------------
00000000 00000000 00000000 01001010
//按位异或,找不同,不同为1,相同为0
//c=74

移位运算符

>>、<<、>>>

移位运算符针对的也是数据的补码进行操作。

>>(右移运算符):

表达式>>右移多少位
int a = 5;
int c = a>>2;
a的补码:
00000000 00000000 00000000 00000101
  00000000 00000000 00000000 000001
a>>1
00000000 00000000 00000000 00000001
前面缺少位补符号位
c = 1

<<(左移运算符):

表达式<<左移多少位
int a = 5;
int c = a<<2;
a的补码:
   00000000 00000000 00000000 00000101
   000000 00000000 00000000 00000101
a<<1
   00000000 00000000 00000000 00010100
后面缺上的位补0
c = 20

>>>(无符号右移运算符):

表达式>>右移多少位
int a = -5;
int c = a>>>2;
a的补码:
11111111 11111111 11111111 11111011
  11111111 11111111 11111111 111110
a>>1
00111111 11111111 11111111 11111110
前面缺少的位只补0
c = 1073741822

条件运算符

? :

布尔表示式?表示式1:表达式2
System.out.println(true?5:8);//5
System.out.println(false?5:8);//8

结论 :布尔表达式为真,执行表达式1,布尔表达式为假,结果为表达式2,并于表达式的结果作为整个运算的结果。

运算符优先级

优先级 运算符 结合性
1 () [] . 从左向右
2 ! +(正) -(负) ~ ++ -- 从右向左
3 *  / % 从左向右
4 +(加) -(减) 从左向右
5 << >> >>> 从左向右
6 < <= > <=  从左向右
7 == != 从左向右
8 & 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14

= += -= *=  /= %= &= |= 

~= <<= >>= >>>=

从右向左

你可能感兴趣的:(java,jvm,开发语言)