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 * */ } }
相关文章推荐
- java的位运算符详解实例——&、^、|、~、<<、>>、>>>
- 使用Java代码遍历以获取Map<String,Object>的值
- <<J2SE>>Java代码自写9Path算法
- Java NIO原理图文分析及代码实现<转>
- javaweb基础学习(一)<ServletConfig与ServletContext对象详解>
- <java.util>PriorityQueue代码分析
- Java 基础一些代码练习笔记( GenericFoo<T> 泛型)
- Java运算符详解& >> <<
- <转>防止刷新/后退引起的重复提交问题的Java Token代码,非Struts
- java List<>详解
- Java1.7源代码学习(2)--collection<E>
- 用人类的思维方式去写更容易维护的代码——用<抽象-基础-逻辑>模式开发Java(Android)程序
- Java 单例模式详解<转>
- java_web初学笔记之<Servlet中的request和response对象详解>
- java 处理html代码 中<p> 标签 保证闭合
- List<Map<String,Object>>使用Java代码遍历以获取String,Object的值
- java二维码生成与解析代码实现 <转载自http://blog.csdn.net/about58238/article/details/7494704>
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Hibernate_配置详解>(三十六)
- Java 一个特殊的类 ServiceLoader<S> 详解
- Java笔记3 多线程<2>线程间通信-代码分析以及多线程常见方法的运用