一些位运算技巧

1.通用的「枚举二进制子集」的方法,伪代码:

function get_subset(bitmask)
    subset = bitmask
    answer = [bitmask]
    while subset != 0
        subset = (subset - 1) & bitmask
        put subset into the answer list
    end while
    return answer
end function

其中bitmask 表示一个二进制数,subset 会遍历所有 bitmask 的子集,并将所有的子集放入 answer 中。需要注意的是,bitmask 本身也是 bitmask 的一个子集,因此 answer 在初始时就包含 bitmask 本身。

2. x&(x - 1) 将x的二进制表示中右边第一个1置0

 x:       0010,0101,0000
 x−1:     0010,0100,1111
 x&(x−1): 0010,0100,0000

3. x&(~x+1) 得到x最右侧不等于0的位

全部评论
仅将第 n 位置 1:x | (1 << n)
点赞 回复 分享
发布于 2021-05-30 23:23

相关推荐

02-26 13:56
已编辑
重庆财经学院 Java
King987:你有实习经历,但是写的也太简单了,这肯定是不行的,你主要要包装实习经历这一块,看我的作品,你自己包装一下吧,或者发我,我给你出一期作品
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务