美文网首页
LeetCode191——位1的个数(位运算)

LeetCode191——位1的个数(位运算)

作者: random_walk | 来源:发表于2021-07-30 10:18 被阅读0次

位运算基础

位运算基于整数的二进制表示进行运算。由于计算机内部就是以二进制来存储数据,因此位运算会很快。基本的位运算共6种,分别为按位与、按位或、按位异或、按位取反、左移和右移。

与、或、异或

  • 与:&
  • 或:|
  • 异或:^

左移和右移

num << i 表示将 的二进制表示向左移动i位所得的值。
num >> i 表示将 的二进制表示向右移动 i位所得的值。
左移运算,右边全部补零。右移运算,如果是正数的话,左边全部补零,如果是复数的话补原始位。

位运算常见效果

image.png

题目描述

191. 位1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数。

方法一:循环检查

可以直接循环检查给定整数 n的二进制位的每一位是否为 1
代码:

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int ret = 0;
        for (int i = 0; i < 32; i++) {
            if (n & (1 << i)) {
                ret++;
            }
        }
        return ret;
    }
};

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/number-of-1-bits/solution/wei-1de-ge-shu-by-leetcode-solution-jnwf/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

方法二:位运算优化

观察这个运算:n &(n - 1),其运算结果恰为把n的二进制位中的最低位的1变为 0之后的结果。n如果不为0,那么n-1就是二进制第一个为1的变为0,后面全为1

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int ret = 0;
        while (n) {
            n &= n - 1;
            ret++;
        }
        return ret;
    }
};


作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/number-of-1-bits/solution/wei-1de-ge-shu-by-leetcode-solution-jnwf/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • LeetCode191——位1的个数(位运算)

    位运算基础 位运算基于整数的二进制表示进行运算。由于计算机内部就是以二进制来存储数据,因此位运算会很快。基本的位运...

  • C语言08- 位运算,宏定义,递归

    16:位运算 16.1:位运算概述 二进制与位运算 16.2:与(and):& 与运算:只有当2个数对应的位都为1...

  • 位运算

    参考:位运算技巧 位运算的使用 1.and运算and运算通常用于二进制取位操作,例如一个数and1的结果就是取二进...

  • 位运算

    各种位运算的使用 === 1. and运算 === and运算通常用于二进制取位操作,例如一个数 and 1的结果...

  • php 与、或、异或运算

    1.与运算(&) 参加运算的两个数据,按二进制位进行“与”运算。 运算规则: 即:两位同时为“1”,结果才为“1”...

  • golang 位运算符

    位运算,是两个数字的二进制对应的值,每一位,进行运算,得出新值的过程 & = 两个数,每一位,同时都=1,则返回1...

  • 位运算符

    位取反运算符 位取反运算符(~)是对所有位的数字进行取反操作 位与运算符 位与运算符(&)可以对两个数的比特位进行...

  • &(与运算)、|(或运算)、^(异或运算)

    按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&0=0; 0&1=0; 1...

  • &,|,^运算

    按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&0=0; 0&1=0; 1...

  • 位运算符

    按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&0=0; 0&1=0; 1...

网友评论

      本文标题:LeetCode191——位1的个数(位运算)

      本文链接:https://www.haomeiwen.com/subject/zpeqvltx.html