一)~ (先转整,再运算)
二)算术运算符 (先转整,再运算)
三)移位运算符(先转整,再运算)
要移位的数 移位运算符 移几位
>>:带符号右移,移位运算符 在进行移位之前,先将其转整 ,然后再进行运算。
int x=8;
int y= x>>2;
注:要移位时候, 化二进制
(左边补符号位,右边舍去)
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
10 1010 a
11 1011 b
12 1100 c
13 1101 d
14 1110 e
15 1111 f
00 00000000 00000000 00000000 000010
16
0 0000000 0000000 0000000 0001000 (8)
00 0000000 0000000 0000000 000100 (4)
000 0000000 0000000 0000000 00010 (2)
000 0000000 0000000 0000000 0001 (1)
相当于除2操作
用效率最高的方法完成对一个数的减半操作
int x=8;
int y=x/2;
int x =-8;
int y=x>>2;
除法的效率低
移位的效率高(节省时间)
00000000 00000000 00000000 00001000
11111111 11111111 11111111 11110111
1 11111111 11111111 11111111 1111100 (-3)
11 11111111 11111111 11111111 111110 (-2)
-1
0001
1110
1111
0000 0001
1111 1110
1111 1100
byte x=8;
byte y=x>>1;
y=int
<<:带符号左移
意:左边的东东被舍去,右边补0
int x=8;
int y=x<<2;
0 0000000 00000000 00000000 00001000
0000000 00000000 00000000 000010000 (16)
000000 00000000 00000000 0000100000 (32)
带符号左移相当于乘2操作
>>>:无符号右移
注意:左边始终补0,右边舍去
byte x=10;
byte z=x>>>2;
四)比较运算符(>.<.>=.<=.==.!=)
他们的结果是一个boolean
int x=10;
int y=20;
boolean z=x>y;
int x=10;
int y=10;
boolean z=x>=y;
true
五)位操作(再进行运算之前,先转整,再运算
几位啊?化二进制
&(按位与)
【】
【】
-----
【】
公式:
0
0
---
0
0
1
---
0
1
0
---
0
1
1
--
1
int x=8;
int y=9;
z=x&y;
byte z= int
00000000 00000000 00000000 00001000 x
00000000 00000000 00000000 00001001 y
---------------------------------------------------
00000000 00000000 00000000 00001000 z8
|(按位或)
0
0
--
0
1
0
--
1
0
1
--
1
1
1
--
1
00000000 00000000 00000000 00001000 x
00000000 00000000 00000000 00001001 y
---------------------------------------------------
00000000 00000000 00000000 00001001 z
^(按位异或)
0
0
--
0
1
0
--
1
0
1
--
1
1
1
---
0
相同为 0
不同为1
规则:两次异或还得原值
int surce=8;
int pass=15;
int des=source^pass=7;
1000
1111
------
0111 7
int z=des^pass;
0111
1111
------
1000 8
凡是带“位”字 都是先转整,再运算。
四则运算
~
位操作运算符号的优先级都比算数运算符的优先级低( r)
~
+-
&|^
逻辑操作
&& (逻辑与)
boolean x=true;
boolean y=false;
boolean z=x&&y;
如果x和y是boolean值,那么其结果也是boolean值。
x true (1)
y false (0) &
---------
false
&&:有逻辑短路的显现!!!!!!
A&&B&&C
A false 后面就不算了,不管了 ,整个表达式的值是false
A true 要看B
false 后面就不算了,不管了 ,整个表达式的值是false
true 要看c
false 整个表达式的值是false
true 整个表达式的值是true
Ex:
public class T
{
public static void main(String[] args)
{
int x=10;
int y=8;
int z=2;
boolean zz= (x<y)&&(++z>0);
System.out.println(zz); //false
System.out.println(z); //2
}
}
|