(6)位运算
一、 << >>
正数位移例子(补0)
例1:3<<2=12 int 类型为8个字节即32位 3的二进制位向左移2位,左边最高两位去掉,右面补两个零
0000-0000 0000-0000 0000-0000 0000-0011(下去)
0000-0000 0000-0000 0000-0000 0000-1100(添上)
例2:6>>2=1 6的二进制位向右移2位,右边最低两位去掉,左面补两个零
0000-0000 0000-0000 0000-0000 0000-0110(下去)
0000-0000 0000-0000 0000-0000 0000-0001(添上)
负数是正数的二进制取反得到的(补1),其他一样
规律:>>:最高位补什么由原数据的最高位值而定
最高位为0,右以后,用0补空位
最高位为1,右以后,用1补空位
>>>无论最高位,移后用0补
正数最高位补0,负数最高位补1
向左移n位 <=> x *2^n
向右移n位 <=> x /2^n (小数点后面舍弃)
2)& |
例子:6&3=2
110
&011
--------------
010
二、应用1:获取每四位的16进制数
/*
* 要获取下一个四位
*/
int temp1;
temp1=60>>4;//右移四位
temp=temp1&15;//相当于存放下四位的值
System.out.println("下四位对应的数值为:"+temp);
System.out.println("d的后四位对应的ASCII码英文为:"+(temp>9?(char)temp:temp));//通过三位运算符判断是否要转换为字母,若小于9,不用转换为字母
应用2:输出某数的二进制表示
/*
* 输出60的二进制表示
* 步骤:
*1、通过与运算得到每位的二进制是0或者1
*2、将原数每次右移1位
*3、将得到的数组倒置输出
*/
int count=0;
int[]ar=new int[32];
while(count<32) {
temp=d&1;
ar[count]=temp;//将与后的每一位存放在数组中
//System.out.print(temp);
count++;
d=d>>1;
}
for(int i=ar.length-1;i>=0;i--)//倒置数组,因为是从最低位存的,正常显示二进制应该从最高位开始显示
{
System.out.print(ar[i]);
}