您的位置:首页 > 编程语言 > Java开发

java 位运算>><< >>> & | ~ ^ 代码详解

2014-02-16 23:20 483 查看
java 位运算>><< >>> & | ~ ^ 代码详解

相关理伦文档这里不说了,也是网上看的,复制没意思!代码+算法请看下面代码

package org.rui.utf;

public class BinAlgorithm {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int i=2;//2=10
		int j=3;//3=11
		/**
		 * 2乘2的3次方
		 * 2*2*2*2=16
		 * 
		 * 转为二进制计算 
		 * (2/2=1 余数0      前面补0共32位)
		 * 2=0000 0000 0000 0000 0000 0000 0000 0010 
		 * 二进制移右3位 =0000 0000 0000 0000 0000 0000 0001 0000 
		 * 10000转十进制(1乘2的4次方)=16		 *
		 */
		System.out.println(i<<j);
		i<<=j;//效果一样,就是算完再赋值给i
		System.out.println(i);
		
		/**
		 * 相反 除于2的3次方
		 * 2/2/2/2=0
		 *二进制2=0000 0000 0000 0000 0000 0000 0000 0010 
		 *左移3位 =32个全是0		
		 */
		System.out.println(i>>j);
		
		int bt=-20;
		//bt>>2=  1000 0000 0000 0000 0000 0000 0000 0101
		System.out.println(">>:"+(bt>>2));
		/**
		 * 无符号右移
		 * 它使用了“零扩展”:无论正负,都在高位插入0
		 * 20=10100
		 * 用补码表示,1000 0000 0000 0000 0000 0000 0001 0100
		 *  >>>2=  0010 0000 0000 0000 0000 0000 0000 0101
		 *  
		 *  1*2的30次方=1073741824 +-5
		 *  =1073741819    
		 *  为什么会这样算,这个问题也还在研究中,
		 */
		//bt>>>2= 0010 0000 0000 0000 0000 0000 0000 0101
		System.out.println(">>>:"+(bt>>>2));
		
		
		/**
	      位运算符包括: 与(&)、非(~)、或(|)、异或(^)
             &:当两边操作数的位同时为1时,结果为1,否则为0。如1100&1010=1000 
      | :当两边操作数的位有一边为1时,结果为1,否则为0。如1100|1010=1110
      ~:0变1,1变0   ~   是 一 元 运 算 法 ,对 数 据 的 每 个 二 进 制 位 取 反 
      ^:两边的位不同时,结果为1,否则为0.如1100^1010=0110      
	 */
		//10&11=10 转十进制=2
		System.out.println(2&3);
		//10|11=11 转十进制=3
		System.out.println("2|3="+(2|3));		
		/**
		 * 2= 原码0000 0010
			求补0000 0010
			~2
			取反1111 1101(所得为补码形式) 求补=取反+1			
			而~2 的原码形式
			补码的补码 10000 0010+1=10000 0011 即-3
		 */
		System.out.println(~2);
		//10^11=01 转十进制=1
		System.out.println(2^3);

	}

}


----------------------

package org.rui.test;

public class BitTest {
	/**
	 * 关于>>取代除  <<取代乘   注意只能取代整数运算,被除和乘的数要是2的次方和
	 * @param args
	 */
	
	public  static void main(String[] args) {
	
	System.out.println((double)(1000>>6));
	System.out.println(1000D/64D);
	
	System.out.println(Integer.toBinaryString(1000));
	/**
	 * 1111101000>>6=1111=15
	 * 
	 */
	
	System.out.println((double)(1000<<6));
	System.out.println(1000D*64D);
	
	/**
	 * 1111101000<<6=1111101000 000000=
	 * 1*2的9次方+  512
	 * 1*2的11次方+ 2048
	 * 1*2的12次方+ 4096
	 * 1*2的13次方+ 8192
	 * 1*2的14次方+ 16384
	 * 1*2的15次方+ 32768
	 * =64000
	 * 
	 */
	

	}

	
	

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: