-
取模运算符的本质: a%b=a-a/b*b 10%-3=10-10/-3*-3=10-9=1
-
面试题:
-
int i=1;i=i++; 输出i 结果为 1 ( temp=i; i=i+1;i=temp) 先赋值后自增
-
int i=1; i=++i; 输出i 结果 2(i=i+1; temp=i;i=temp)
-
-
逻辑运算符:
-
&& 短路与 & 逻辑与
-
&& 短路与: 如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
-
&逻辑与: 不管第一个条件是否为false ,第二个条件都要判断,效率低
-
-
|| 短路或 |逻辑或
-
|| 短路或 : 如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
-
|逻辑或: 不管第一个条件是否为真,第二个条件都要判断
-
-
-
原码、反码、补码
-
对于有符号的而言:
-
二进制的最高位是符号位: 0表示正数,1表示负数
-
当我们看运算结果的时候,要看他的原码
-
在计算机运算的时候,都是以补码的方式进行运算的
-
Java没有无符号数,换言之,Java中的数都是有符号的
-
0的反码,补码都是0
-
负数的补码=他的反码加一, 负数的反码=负数的补码-1
-
负数的反码=他的原码符号位不变,其他位取反
-
正数的原码,反码,补码都一样
-
示例:
-
2&3 00000000 00000000 00000000 00000010 & 00000000 00000000 00000000 00000011=00000000 00000000 00000000 00000010 =2
-
~-2 10000000 00000000 00000000 00000010->反码 11111111 11111111 11111111 11111101->补码
11111111 11111111 11111111 11111110->取反 00000000 00000000 00000000 00000001 结果为1
-
~2 00000000 00000000 00000000 00000010->操作 11111111 11111111 11111111 11111101
--->负数补码求原码---->反码:11111111 11111111 11111111 11111100-->原码 10000000 00000000 00000000 00000011 -3
-
-
-
-
左移 << 右移>>
-
左移 *2
-
右移 /2
-



