Java运算符

来源:互联网 发布:matlab 数据拟合 编辑:程序博客网 时间:2024/06/16 04:22

   Java运算符 :算术运算符,赋值运算符 ,关系运算符,逻辑运算符,移位运算符,位运算符,三目运算符等

算术运算符:+   -   *    /   %    ++  --

除号运算 /  :除数不为零,  % 取余:与符号位无关,

a++与++a的区别?先赋值后加1,先加1后赋值
思考?a=1;  a+=a++; 为多少?  a+=++a;    为多少?
a+=a++;即a=a+a++;   根据a++先赋值后加1,  最终a=2
a+=++a;即a=a+++a;   根据++a先加后赋值,  最终a=3
根据反编译(这里并未贴出反编译代码,自己可以去尝试,java -c -l 加上class文件),可以看出a=a+a++, a虽然加了1,但此时a 被赋值2;所以结果为2

赋值运算符:=    +=   -=     *=    /=  %=    <<=    >>=    &=     ^=    |=

复合赋值运算不会改变结果的类型,所以在有些时候运算在逻辑上会出现错误,但是符合计算中数值的表述。例如:

byte b = 127;b += 1;System.out.println(b);

根据前面的介绍,byte类型的取值区间是-128~127,由于复合赋值运算符不改变结果的类型,则导致结果是-128,而不是128.原因如下byte类型值127的机器数是01111111,0表示正数,后续的数值表示127该数值加1后,得到的数值是10000000,二进制加法而10000000在byte类型中恰好是-128的机器数表示形式其它类型的符合运算符也可能存在类似的情况,使用时需要注意。

byte b = 127;b = b+1;System.out.println(b);//此时报错 b+1此时默认是int型,即推出默认类型,int型和浮点double型。

关系运算符:==  !=   >   <   >=   <=

逻辑运算符:&&   ||   !

&&与||使用注意:&&若前面的条件为false,则后面就不执行了,||若前面的条件为true,则后面就不执行了,这与接下来的位运算,& |不同。

移位运算符:>>    <<   无符号右位移>>>

位运算符:&   |     ^(异或即不同的时候才为1)     ~  (取非)

原码,反码,补码?
正数的原码,反码,补码一样;
负数的反码是在原码基础上,符号位不变,其他取反;
负数的补码是在原码基础上,符号位不变,其他取反加 1.

注意:运算时使用的都是补码,运算后若为符号位为1要重新变为 原码,即结果。

三目运算符:?  :   
对于条件表达式b?x:y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值
0 0
原创粉丝点击