算法入门——位运算(一)

神级运算——位运算 - 知乎 (zhihu.com)

位运算(&、|、^、~、>>、<<)

对二进制进行的运算(+、-、*、/)都叫 位运算

程序设计中对位模式或二进制数的一元和二元操作。

位运算的问题,很多都很有技巧性

2 的幂

n:二进制表示(大于0的数)

n为2的幂

  • 必要性:恒有 n & (n - 1) == 0,这是因为:

    1. n 二进制最高位为 1,其余所有位为 0
    2. n−1 二进制最高位为 0,其余所有位为 1
  • 充分性: n & n-1可以把n最低位的1变0,而当n & n-1 == 0时,则说明n只有一个1

class Solution {
    public boolean isPowerOfTwo(int n) {
        return n > 0 && (n & (n - 1)) == 0;
    }
}

2 的幂 (位运算,极简解法+图表解析)

Integer.bitCount()理解

位1的个数

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int count = 0;
        for (int i = 0; i < 32; ++i) {
            count += n & 1;//得到二进制末尾是否为 1
            n >>= 1;//算数右移,高位补1,低位丢弃
        }
        return count;
    }
}

【负雪明烛】详解位运算,附本题躲坑指南 - 位1的个数

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概念 程序中的所有数在计算机中都是以二进制的形式存储的,位运算就是直接对整数在内存中的二进制位进行操作。 二、...
    王小鹏的随笔阅读 2,662评论 0 0
  • 将只有两种状态的一组对象用二进制进行表示是一种常用建模方法,因此位运算技巧是比较重要的。 位操作经典题目:37. ...
    桃桃沙弥阅读 2,900评论 0 0
  • 实战位运算要点: 判断奇偶x % 2 == 1 → x & 1 == 1x % 2 == 0 → x & 0 =...
    倚仗听江阅读 994评论 0 0
  • 231. 2的幂[https://leetcode-cn.com/problems/power-of-two/] ...
    阿宝阿贝阅读 1,924评论 0 0
  • 读完本文,你可以去力扣拿下如下题目: 191.位1的个数[https://leetcode-cn.com/prob...
    labuladong阅读 3,207评论 0 7