按位异或运算(^)
对应位上的数据不同返回1,相同返回0.
public class Hello
{
public static void main(String [] args)
{
int num1=12;//1100
int num2=11;//1011
System.out.println(num1^num2);//0111
}
}
正数和负数按位异或运算的结果
1和0最后返回1,最终结果为负数。
按位左移(<<)
二进制位上的数据同意向左移动指定的位数,右边空出的位置以0补齐(丢弃最高位,0补最低位)。
public class Hello
{
public static void main(String [] args)
{
int num1=12; //0000000000001100
System.out.println(num1<<1);//0000000000011000
}
}
输出24
按位左移把所有数字向左移动对应位数,符号位不变,低位空位补0.
左移的运算数是byte和short类型时,将自动扩大为int类型。
当超过int类型的最大范围,则原来的符号位被截断丢弃,使用左移后的最高位作为新的符号位。
面试题:
请使用最有效的方式计算出2*8的值。
public class Hello
{
public static void main(String [] args)
{
int num1=2;
System.out.println(num1<<3);//16
}
}
带符号右移(>>)
符号位不改变,最高位填充移位后左侧的空位(符号位填充)。
不带符号右移(>>>)
低位溢出,高位补0,符号位变为0