Java入门--三目运算符,位运算符,位移运算符及运算符优先级

250 阅读3分钟

一、三目运算符

格式:表达式?值:值

public static void main(String[] args) {
    System.out.println(1>2?1:2);
}
//输出2

所以:三目运算符的效果是当表达式为true时取?后面的值,为false则取:后面的值

二、位运算符

1、&运算符
将两个数转为对应的二进制后,然后对每一位的数进行比较,两个都为1则为1,否则则为0。

示例:2&3

2的二进制:0010

3的二进制:0011

​ 结果是0010

将0010转为10进制之后是2,所以2&3=2;

2、| 运算符 将两个数转为对应的二进制后,然后对每一位的数进行比较,有一个为1则为1,否则为0。

示例:5|7

5的二进制:0101

7的二进制:0111

​ 结果是0111

将0111转为10进制之后是7,所以5|7=7;

3、~运算符 将数转为对应的二进制后,如果位为1, 则为0,为0就为1。

示例:~6

6的二进制:00000000 00000000 00000000 00000110

​ 取反后:11111111 11111111 11111111 11111001

因为高位是1,所以原码为负数,负数的补码是其绝对值的原码取反,末尾再加1。

因此,我们可将这个二进制数的补码进行还原:

(1)首先,末尾减1得反码: 11111111 11111111 11111111 11111010

(2)其次,将各位取反得原码:00000000 00000000 00000000 00100101

(3)此时二进制转原码为-7

(4)所以~6 = -7

快速运算:+1取反

4、^运算符 将数转为对应的二进制后,如果位相同则为0,不同为1

示例:2^3

2的二进制:0010

3的二进制:0011

​ 结果0001

将0001转为10进制之后是1,所以2^3=1;

三、位移运算符 1、<<运算符(带符号左移) 将数字先转为二进制,然后将数字左移,<<左边的数是值,右边的是要移动的位数。

示例:2<<2

2的二进制:0010

将1向左移动两位是1000,转为十进制是8,所以2<<2是8

快速运算:2*2的平方

2、>>运算符(带符号右移) 将数字先转为二进制,然后将数字右移,>>左边的数是值,右边的是要移动的位数。

示例:8>>2

8的二进制:1000

将1向右移动两位是0010,转为十进制是2,所以8>>2是2

快速运算:8/2的平方

3、>>>运算符(无符号右移) 计算正数时和>>作用相同,计算负数时则是会去掉符号

示例:-8>>>2

-8的二进制原码是10000000 00000000 00000000 00001000

-8的二进制反码是11111111 11111111 11111111 11110111

-8的二进制补码为11111111 11111111 11111111 11111000

右移两位之后为00111111 11111111 11111111 11111110

转为十进制结果为1073741822,所以-8>>>2等于1073741822

四、运算符优先级

先计算()、.、{}、;和,然后

++、-- 、~ 、!
*、/、%
+、-
<<、>>、>>>
<、>、<=、>=、instance of
==、!=
&
^
|
&&
||
?:(三目运算符)
=、*=、/=、%=
+=、-=、