【位运算总结】 之 左移运算

本文介绍了左移运算的概念及其在代码优化中的作用,特别是如何利用左移运算来生成并判断整数的二进制子集。通过左移运算,可以快速地从一个整数中获取其二进制表示的某位,从而解决给定集合所有子集的问题。
摘要由CSDN通过智能技术生成

左移运算的概念:左移运算符

应用:

1、优化代码

       因为左移运算比乘法快,因此x = x*2可优化为x = x << 1。

2、计算一个数的二进制的某位

       如题:给定一个含不同整数的集合,返回其所有的子集。

       解题思路:
       假设该数组为a[n],有n个元素。对每个元素标记为1或0表示某子集内有或没有该元素,如此排列下来,000…00,000…01,000…10, …… ,至111…1,共有2^n-1中排列方式。若将区间[0,2^n-1]中的每个整数表示为一个子集,遍历每个集合可表示为

for (int i = 0; i < (1<<n), ++i)

       如何可以从这个整数中得到子集中的元素呢?

       这就用到了左移运算,如 1 << 0 = 1,1 << 2 = 10,1 << 3 = 100…… 那么,我们将每个整数相与& (1 << j),就可以得到该整数的二进制表示中,第 j 位是0还是1!

       所以

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值