首页 > 其他 > 详细

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

时间:2014-02-17 15:40:01      阅读:315      评论:0      收藏:0      [点我收藏+]

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 00000 
		 * 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);

	}

}


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

原文:http://blog.csdn.net/liangrui1988/article/details/19303695

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!