Java移位操作、位运算详解
2017-08-06 13:52
701 查看
1、如何用移位操作实现乘法运算
把一个数向左移动n位相当于把该数乘以2的n次方,因此当乘法运算中的某一个数字满足这个特点时,就可以用移位操作来替代乘法操作,从而提高效率。实例如下:
public class Test { public static int powerN(int m,int n){ for (int i=0; i<n; i++) m = m<<1; return m; } public static void main(String[] args){ System.out.println("3乘以8="+powerN(3,3)); System.out.println("3乘以16="+powerN(3,4)); } }
程序运行结果为:
3乘以8=24
3乘以16=48
2、利用移位操作判断一个数是否为2的n次方
2的n次方可以表示为:2^0,2^1,2^2,···,2^n。最直观的思想是用1做移位操作,然后判断移位后的值是否与给定的数相等。实例如下:
public class Test { public static boolean isPower(int n){ if (n<1) return false; int i = 1; while (i<=n){ if (n==i) return true; i = i<<1; } return false; } public static void main(String[] args){ System.out.println(isPower(4)); System.out.println(isPower(6)); } }
程序运行结果为
true
false
3、如何求二进制中1的个数
问题描述:给定一个整数,输出这个整数二进制表示中1的个数,例如,给定整数7,其二进制表示为111,因此输出结果为3.该问题可以采用位操作来完成。具体思路如下:首先,判断这个数的最后一位是否为1,如果为1,则计数器加1,然后,通过右移丢弃掉最后一位。循环执行该操作直到这个数等于0为止。在判断二进制表示的最后一位是否为1时,可以采用与运算来达到这个目的。
实例如下:
public class Test { public static int countOne(int n){ int count = 0; while (n>=1){ if ((n&1)==1) //判断最后一位是否为1 count++; n = n>>1; } return count; } public static void main(String[] args){ System.out.println(countOne(7)); System.out.println(countOne(8)); } }
程序运行结果为
3
1
以上这个算法的时间复杂度为O(n),其中n代表二进制数的位数。由于题目要求求出1的个数,此时可以只考虑1的个数,把二进制表示中的每个1看成独立的个体。给定一个数n,每进行一次n&(n-1)计算,其结果中都会少了一位1,而且是最后一位。
利用这个特性可以编写出如下代码:
public class Test { public static int countOne(int n){ int count = 0; while (n>=1){ if (n>=1){ //判断最后一位是否为1 n=n&(n-1); count++; } } return count; } public static void main(String[] args){ System.out.println(countOne(7)); System.out.println(countOne(8)); } }
程序运行结果为
3
1
改进后的算法时间复杂度为O(m),其中m为二进制数中1的个数,显然在二进制数中1的个数比较少时,这个算法的效率更高。
相关文章推荐
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- java的移位操作详解
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- Java对各种文件的操作详解
- Java中的移位操作
- 使用Java操作文本文件的方法详解
- Java对各种文件的操作详解
- Java的移位操作(收集+纠正)
- Java对各种文件的操作详解
- Java应用技巧:对于 Cookie 的操作详解
- Java对各种文件的操作详解
- Java文件操作详解
- ResultSet详解(java数据库操作)
- 使用Java操作文本文件的方法详解
- Java对各种文件的操作详解
- Java文件操作详解