zoukankan      html  css  js  c++  java
  • 8.位运算(1)

    题一:【二进制中1的个数】

    输入一个整数n,输出该数二进制表示中1的个数。其中负数用补码表示。

    分析:常规解法:n的二进制每次和flag做与运算  =》查看当前位是否为1,如果是count++,然后将flag左移一位。

     1 public class Solution {
     2     public int NumberOf1(int n) {
     3         int count=0;
     4         int flag=1;
     5         while(flag!=0){
     6             if((n&flag)!=0){
     7                 count++;
     8             }
     9             flag = flag<<1;;
    10         }
    11         return count;
    12     }
    13 }

    分析:巧妙解法--我们发现把一个整数减去一,都是把二进制最右边的1变成0.如果他的右边还有0,则所有的0变为1,而他的左边的所有未都保持不变。接下来我们把一个整数和他减去1的结果做与运算,相当于把他的最右边的1变成0

     1 public class Solution {
     2     public int NumberOf1(int n) {
     3         int count=0;
     4         while(n!=0){
     5             n=n&(n-1);
     6             count++;
     7         }
     8         return count;
     9     }
    10 }
  • 相关阅读:
    项目总结
    个人博客
    个人博客
    个人博客
    个人博客
    个人博客
    个人博客
    个人博客
    个人博客
    浅谈Vue与swiper轮播图框架结合小案例
  • 原文地址:https://www.cnblogs.com/qmillet/p/12021623.html
Copyright © 2011-2022 走看看