1.如何用位移操作实现乘法运算
public static int powerN(int m,int n){//m乘以2的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("4乘以8="+powerN(4,3));
}
2.如何判断一个数是否为2的 n 次幂
public static boolean isPower(int n){
if (n<1)
return false;
for (int i=1;i<=n;i=i<<1){
if (i==n)
return true;
}
return false;
}
num如何使2的n次幂,那么num&(num-1)=0;
public static boolean isPower1(int n){
if (n<1)
return false;
int m = n&(n-1);
return m==0;
}
public static void main(String[] args) {
System.out.println(isPower(4));
System.out.println(isPower(6));
System.out.println(isPower1(4));
System.out.println(isPower1(6));
}
3.如何求二进制中1的个数
判断最后一个数是否为1,如果为1,n&1的结果肯定为1,然后计数加1。然后向右位移。
public static int countOne(int n){
int count=0; //用来计数
while (n>0){
if ((n&1)==1){
count++;
}
n>>=1;
}
return count;
}
给定一个数n,每进行一次n&(n-1)计算,其结果中都会少了一位1,而且是最后一位。
public static int countOne1(int n){
int count=0;
while (n>0){
if (n!=0){
n=n&(n-1);
count++;
}
}
return count;
}
public static void main(String[] args) {
System.out.println(countOne(7));
System.out.println(countOne(8));
System.out.println(countOne1(7));
System.out.println(countOne1(8));
}