zoukankan      html  css  js  c++  java
  • 二进制中1的个数 --剑指offer

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

    最开始想 和1做与运算 然后位右移 没有通过测试 是因为负数位右移用1来补位,导致判断没法终止。所以换一种方法

    还是和1做与运算,但是1位左移,一直到1位左移变成0为止,如果位运算结果不是0,计算结果➕1;

    public class Solution {
        public int NumberOf1(int n) {
            int base = 1;
            int sum=0;
            while(base != 0){
                if((n&base) != 0){
                    sum ++;
                }
                base=base << 1;
            }
            return sum;
        }
    }

    记录一种网上方法:

    把n减1然后和原先的n进行与运算,运算结果不为0说明有一个位为1,循环往复

    例:n的二进制表示为 1110 减1后为 1101 然后1110和1101进行与运算结果为1100 一次运算可以说明有一个1 ,这样下去就可以找到所有的1;

    public class Solution {
        public int NumberOf1(int n) {
            int count=0;
    //只要n不为0,就说明有一个位为1
    while(n!=0){ count ++; n = n&(n-1); } return count; } }
  • 相关阅读:
    张旭结对编程作业
    团队第一次作业(软工C#造梦厂)
    张旭第二次作业
    跨域问题
    .Net Core3.1使用AspectCore
    .Net中HttpClient之SendAsync方法
    两个具有相同属性的类赋值
    工具类--HttpUtils
    工具类--CacheHelper
    工具类--JsonHelper
  • 原文地址:https://www.cnblogs.com/nlw-blog/p/12417794.html
Copyright © 2011-2022 走看看