java中各种运算符

比如java中常用的运算符

符号++ ,+,--,-

有时这个符号拼凑起来也有点复杂

比如这样一个运算式

int i=3;

i+++i-i++-++i

+ -运算符的优先级 低于++-- 先运算++--

可以将上面的式子拆开

i++ + i - i++ - ++i

这样是不是容易多了

 

先来个简单点的

1 K++

int k=0;

System.out.println(K++)

System.out.println(k)

输出结果为 0

           1

这说明 K++式子并没有相加 而是k本身加了1

 

2 ++K

int k=0;

System.out.println(++k)

System.out.println(k)

输出结果为 1

           1

这说明 K++式子本身加了1 而是k本身也加了1

 

K----K效果与上一样

 

再来算上面的式子

i=3

i++ + i - i++ - ++i

 1………….2………3…………..4

 

1 i++本身不变 i++=3  i=4

2 i=4

3 i++本身不变 上面i=4 此时i++=4 i=5

4 ++i本身变化 上面i=5 此时 ++i=6 i=6

 

取出上面红色的值

结果为 : 3+4-4-6=-3

 

 

符号 ~

 

比如 int i=102;

~i=-103

     int i=-3

~i=2

 

~计算可以匹配一个运算式

 int I;

~I=(-I)-1;

也就是求相反值-1

 

符号>> <<

举例

int i=100;

int j=2;

i>>j=25

i<<j=400

 

<<匹配运算式

i>>j   等价于   i/(int)Math.pow(2, j)

i<<j  等价于    i*(int)Math.pow(2, j)

也就是 i除以或乘以 2j次方

 

符号(抑或) |

符号 | 就比较复杂一点 里面涉及到二进制与十进制之间的转换问题

比如 32 | 24

32 转换为二进制

Integer.toBinaryString(32) = 100000;

24转换为 二进制

Integer.toBinaryString(24) = 11000;

 

两个并排比较 比较式为数不同 0

100000

011000

位与位比较 00=0  01=1 11=1

上面的结果就是

111000

然后将 111000转换为十进制

1*(int)Math.pow(2, 5)+1*(int)Math.pow(2, 4) +1*(int)Math.pow(2, 3)

=2*2*2*2*2+2*2*2*2+2*2*2

=32+16+8

=56

 

 

符号&

同样32 | 24

32 转换为二进制

Integer.toBinaryString(32) = 100000;

24转换为 二进制

Integer.toBinaryString(24) = 11000;

 

两个并排比较 比较式为数不同 0

100000

011000

位与位比较  00=0  01=0 11=1

上面的结果就是

000000

然后将 111000转换为十进制

0*(int)Math.pow(2, 5)+0*(int)Math.pow(2, 4) +0*(int)Math.pow(2, 3)

=0

 

符号(抑或) ^

假如 2^5

2 转换为二进制

Integer.toBinaryString(2) = 10;

5转换为 二进制

Integer.toBinaryString(5) = 0101;

两个并排比较 比较式为数不同 0

101

010

位与位比较  00=0  01=1 11=0  所谓抑或就是 相同为0 不同为1

上面的结果就是111

转换2进制位 4+2+1=7

 

其他一些符号就不说了 * / %取余

 

 

符号 >>> <<<

假如 27>>>1

 

获取 27的 2进制 :11011

27往右推进一位 11011 所有位数往右移动   01101

 01101的十进制 就是 :13

 

假如  27>>>2

11011 右移两位 00110 结果就是6

 

<<<是不存在的 不用试了  

 

 

 

posted @ 2009-12-03 17:00  饺子吃遍天  阅读(135)  评论(0编辑  收藏  举报