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); } }
原文:http://blog.csdn.net/liangrui1988/article/details/19303695