二进制计算在编程(JAVA)中的应用
来源:互联网 发布:人工智能 科普书籍推荐 编辑:程序博客网 时间:2024/04/28 01:32
我等初级程序员,对二进制以及它的与或非运算神马的都太忽略了,今天突然看到一个二进制运算,觉得很好,记下来:
Java 的 Random 类中有个nextInt()方法,源码如下
public int nextInt(int n) { if (n <= 0) throw new IllegalArgumentException("n must be positive"); if ((n & -n) == n) // i.e., n is a power of 2 return (int)((n * (long)next(31)) >> 31); int bits, val; do { bits = next(31); val = bits % n; } while (bits - val + (n-1) < 0); return val; }要说的是第五行语句:“ if ((n & -n) == n) ”,是用来判断整n是否是2的幂次方的。
判断原理分析:
2的幂次方的整数,如:2、4、8、16...等,它们的二进制表示有个共同点:只有其中某一位是1,其他位都是0,如:
原码:0000 0000 0000 0010, 0000 0000 0000 0100, 0001 0000 0000 0000.....
反码:1111 1111 1111 1101, 1111 1111 1111 1011, 1110 1111 1111 1111.....
补码:0000 0000 0000 0010, 0000 0000 0000 0100, 0001 0000 0000 0000.....
我们知道,正整数 n 是用原码表示的,负整数 -n 是用 n 的补码表示的,
而2的幂次方的补码与原码必然相同,则2的幂次方 n & -n == n 必然成立。。。
思维扩展:数字之间的关系用二进制运算来判断应该挺高效的。。。
0 0
- 二进制计算在编程(JAVA)中的应用
- Vector在Java编程中的应用
- Vector在Java编程中的应用
- Vector在Java编程中的应用[转]
- Vector在Java编程中的应用
- Vector在Java编程中的应用
- Vector类在Java编程中的应用
- Vector在Java编程中的应用
- 观察者模式在Java编程中的应用
- Vector在Java编程中的应用
- Vector在Java编程中的应用
- Vector在Java编程中的应用
- 反射在Java Swing编程中的应用
- 双缓冲在Java编程中的应用
- Java NIO 在网络编程中的应用
- 反射在Java Swing编程中的应用
- 反射在Java Swing编程中的应用
- Vector在Java编程中的应用
- 深入理解计算机系统 习题 1
- 如何用掌沃WiFi商盟制作免费的微信点菜系统
- 第三章 栈和队列 思维导图
- JMX连接tomcat(一)window篇
- jetty8 POST FORM 大小限制
- 二进制计算在编程(JAVA)中的应用
- 君子之交+续篇+番外 txt全集
- DTS介绍
- MySQL分表处理的实现方法(按月份分的表)
- android重点知识
- 九月腾讯,创新工场,淘宝等公司最新面试三十题(第171-200题)
- 删除.svn文件夹
- java8的JVM持久代——何去何从?
- 无废话WCF入门教程一[什么是WCF]