位运算:都是按照二进制的运算
boolean :
true 00000001
false 00000000
5.3
& 位与,两位同时为1 结果是1
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00000011 &
00000000 00000000 00000000 00000001 =1
| 位或,两位同时为0结果为0
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00000011 |
00000000 00000000 00000000 00000111 =7
^异或相同是0不同是1
特点:对同一个值异或两次得到原值.
00000000 00000000 00000000 00000101 5对3取异或得到6
00000000 00000000 00000000 00000011 ^ 3
00000000 00000000 00000000 00000110 结果=6
00000000 00000000 00000000 00000011 ^ 3 再次对3取异或
00000000 00000000 00000000 00000101 得到原值5
~求反:
00000000 00000000 00000000 00000000 ~0
11111111 11111111 11111111 11111111 -1
00000100 4取反
计算机及以补码的形式存放.....
11111011 >>>转换成源码-1
11111010>>> -5
0变1 ,1变0;
00000000 00000000 00000000 00000101 5求反
11111111 11111111 11111111 111111010
-((~x)+1)
移位运算:
左移位:<<
右移位: >>
无符号右移位: >>>
原值不会被修改拷贝原值移动...
00000011 3 <<2
00001100 12
00000100 4>>1
00000010 2
11111111 -1
11111010 -5 >> 1(带符号右移位)负数补1 整数补0
11111101 -3=-1-2^1
11111010 -6 >>> 6位不带符号右移位左边都补0;
00000011 111111 11111111 11 不会得到3因为char类型-6 的字面值类型是int 向右移动6位 依然很大.
* >> 右移位 ,符号位是0 左边补0;符号位是1左边补1;
<< 左移位 ,右边补0;
>>> 无符号右移位左边都补0;
- - 自减
++ 自增
swtich()里面必须是int和enum--即枚举类型。 short、 char 或者 byte他会自动转换为int的。。 long不能自动转换为int.. 因为long比int范围大..可能会丢失精度..
switch example:
当条件满足后面的case 全补都执行打印 1 2 3 用break中断执行.