您的位置:首页 > 其它

(6)位运算

2017-07-03 11:24 86 查看
一、
<<  >>

正数位移例子(补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]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: