(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]);
    	  }
      
















posted @ 2017-07-03 11:25  测试开发分享站  阅读(114)  评论(0编辑  收藏  举报