位运算符
运算符 | 运算 | 范例 |
<< | 左移 | 3<<2=12-->3*2*2=12 |
>> | 右移 | 3>>1=1-->3/2=1 |
>>> | 无符号右移 | 3>>>1=1-->3/2=1 |
& | 与运算 | 6&3=2 |
| | 或运算 | 6|3=7 |
^ | 异或运算 | 6^3=5 |
~ | 反码 | ~6=-7 |
注:位运算是直接对二进制进行运算。
&(与运算):和|(或运算):和^(异或运算)
注:110这个是简写。
例:1 1解析
class Demo7 6的二进制是:110
{ 3的二进制是:011
public static void main(String[] args) 结果是:010
{
System.out.println(6&3);//结果是2
}
}
例:2 2解析
class Demo8 6的二进制是:110
{ 3的二进制是:011
public static void main{String[] args} 结果是 :111
{
System.out.println(6|3);//结果是7。
}
}
例:3
3解析
class Demo9 6的二进制是:110
{ 3的二进制是:011
public static void main(String[] args) 结果是:101
{
System.out.println(6^3);//结果是5。
}
}
例:6^3^3
结论:一个数异或同一个数两次,结果还是这个数。
~(反码)反码运算:
例:
class DemoHome
{
public static void main(String[] args)
{
System.out.println(~6);//结果是 -7。
}
}
<<(左移)左移运算符
例:
class DemoHome1
{
public static void main(String[] args)
{
System.out.println(3<<2);//结果是12。
}
}
总结:左移几位其实就是该数据乘以2的几次方。
<<(左移):可以完成2的次幂运算。
例:3*2(2) =12
>>(右移):右移运算
class DemoHome2
{
public static void main(String[] args)
{
System.out.println(6>>1);//结果是12。
}
}
总结:右移几位其实就是该数据除于2的几次幂。
>>:对于高位出现的空位,原来高位是什么就用什么补这个空位。
例:6/2(1)=3
>>>(无符号右移):
>>>(无符号右移)和>>(右移)的区别:
数据进行右移时,高位出现的空位,无论高位是什么,空位都用0补。
位运算符的细节
<< | 空位补0,被移除的高位丢弃,空缺位补0。 |
>> | 被移除的二进制最高位是0,右移后,空缺位补0。最高位是1,空缺位补1,。 |
>>> | 被移除的二进制最高位无论是0或者是1,空缺位都用0补。 |
& | 二进制位进行&运算,只有1&1时结果是1,否则是0。 |
| | 二进制位进行|运算,只有0|0时结果是0,否则是1,。 |
^ | 相同二进制位进行^运算,结果是0。:1^1=0, 0^0=0。 不相同的二进制位^运算,结果是1。 :0^1=1, 1^0=1。 |
技巧:二进制1就是true,0就是false。
位运算符
运算符 | 运算 | 范例 |
<< | 左移 | 3<<2=12-->3*2*2=12 |
>> | 右移 | 3>>1=1-->3/2=1 |
>>> | 无符号右移 | 3>>>1=1-->3/2=1 |
& | 与运算 | 6&3=2 |
| | 或运算 | 6|3=7 |
^ | 异或运算 | 6^3=5 |
~ | 反码 | ~6=-7 |
注:位运算是直接对二进制进行运算。
&(与运算):和|(或运算):和^(异或运算)
注:110这个是简写。
例:1 1解析
class Demo7 6的二进制是:110
{ 3的二进制是:011
public static void main(String[] args) 结果是:010
{
System.out.println(6&3);//结果是2
}
}
例:2 2解析
class Demo8 6的二进制是:110
{ 3的二进制是:011
public static void main{String[] args} 结果是 :111
{
System.out.println(6|3);//结果是7。
}
}
例:3
3解析
class Demo9 6的二进制是:110
{ 3的二进制是:011
public static void main(String[] args) 结果是:101
{
System.out.println(6^3);//结果是5。
}
}
例:6^3^3
结论:一个数异或同一个数两次,结果还是这个数。
~(反码)反码运算:
例:
class DemoHome
{
public static void main(String[] args)
{
System.out.println(~6);//结果是 -7。
}
}
<<(左移)左移运算符
例:
class DemoHome1
{
public static void main(String[] args)
{
System.out.println(3<<2);//结果是12。
}
}
总结:左移几位其实就是该数据乘以2的几次方。
<<(左移):可以完成2的次幂运算。
例:3*2(2) =12
>>(右移):右移运算
class DemoHome2
{
public static void main(String[] args)
{
System.out.println(6>>1);//结果是12。
}
}
总结:右移几位其实就是该数据除于2的几次幂。
>>:对于高位出现的空位,原来高位是什么就用什么补这个空位。
例:6/2(1)=3
>>>(无符号右移):
>>>(无符号右移)和>>(右移)的区别:
数据进行右移时,高位出现的空位,无论高位是什么,空位都用0补。
位运算符的细节
<< | 空位补0,被移除的高位丢弃,空缺位补0。 |
>> | 被移除的二进制最高位是0,右移后,空缺位补0。最高位是1,空缺位补1,。 |
>>> | 被移除的二进制最高位无论是0或者是1,空缺位都用0补。 |
& | 二进制位进行&运算,只有1&1时结果是1,否则是0。 |
| | 二进制位进行|运算,只有0|0时结果是0,否则是1,。 |
^ | 相同二进制位进行^运算,结果是0。:1^1=0, 0^0=0。 不相同的二进制位^运算,结果是1。 :0^1=1, 1^0=1。 |
技巧:二进制1就是true,0就是false。