目录

左移操作

右移操作

其他博主的理解

应用——力扣题目78. 子集

解法

深度优先搜索

位运算

参考文献


左移操作

# 左移操作,左移一位相当于乘以b,a<<b,a' = a*(2^b)

print(2<<3) # 2*2^3 = 16,2的二进制10,向左移动3位后10000
print(2<<1) # 2*2^1 = 4
print(3<<4) # 3*2^4 = 48,3的二进制为11,向左移动四位后110000

16
4
48

右移操作

# 右移操作,右移一位相当于除以b,a<<b,a' = a//(2^b)注意这里是整除,当向右移动位数大于能移动的位数时,置为0【可以理解为会将尾巴截掉】

print(2>>3) # 2//2^3 = 0,2的二进制10,向右最多移动2位后,所以多移动无疑为0
print(2>>1) # 2*2^1 = 4,向右移动一位为01,
print(3>>4) # 3*2^4 = 48,3的二进制为11,向右移动四位后00
print(3>>1) # 3*2^4 = 48,3的二进制为11,向右移动一位后为01

0
1
0
1

其他博主的理解

>> 和 <<都是位运算,对二进制数进行移位操作。
<< 是左移,末位补0,类比十进制数在末尾添0相当于原数乘以10,x<<1是将x的二进制表示左移一位,相当于原数x乘2。比如整数4在二进制下是100,4<<1左移1位变成1000(二进制),结果是8。
>>是右移,右移1位相当于除以2。
而>>=和<<=,就是对变量进行位运算移位之后的结果再赋值给原来的变量,可以类比赋值运算符+=和-=可以理解。
比如x>>=2, 就是把变量x右移2位,再保留x操作后的值。

应用——力扣题目78. 子集

78. 子集——力扣题目

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

1 <= nums.length <= 10
    -10 <= nums[i] <= 10
    nums 中的所有元素 互不相同

解法

https://leetcode-cn.com/problems/subsets/solution/hui-su-python-dai-ma-by-liweiwei1419/

深度优先搜索

class Solution:# 深度优先搜索# 执行用时:36 ms, 在所有 Python3 提交中击败了85.39% 的用户def subsets(self, nums):res = []sub = []n = len(nums)def dfs(index,sub):if index == n:res.append(sub[:])return# 不选择indexdfs(index+1,sub)# 选择sub.append(nums[index])dfs(index+1,sub)sub.remove(nums[index])dfs(0,sub)return res

位运算

记原序列中元素的总数为 nnn。原序列中的每个数字 aia_iai​ 的状态可能有两种,即「在子集中」和「不在子集中」。我们用 111 表示「在子集中」,000 表示不在子集中,那么每一个子集可以对应一个长度为 nnn 的 0/10/10/1 序列,第 iii 位表示 aia_iai​ 是否在子集中。

例如,n=3,a={1,2,3}:

可以发现 0/1 序列对应的二进制数正好从 0 到2^(n - 1)。我们可以枚举 mask∈[0,2^(n−1)],mask的二进制表示是一个 0/1 序列,我们可以按照这个 0/1 序列在原集合当中取数。当我们枚举完所有 2n2^n2n 个 mask\textit{mask}mask,我们也就能构造出所有的子集。

这里其实有规律,首先是如果一个集合是由n个无重复数字组成的,那么他的子集个数为2^n,因此我们可以通过两次遍历,一个用于遍历子集数,一个用于遍历每个子集代表的二进制

class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:size = len(nums)n = 1 << sizeres = []for i in range(n):cur = []for j in range(size):if i >> j & 1:cur.append(nums[j])res.append(cur)return res

参考文献

https://zhidao.baidu.com/question/310628609.html

https://www.zhihu.com/question/397471252

【Python位运算】——左移操作(<<)右移操作>>相关推荐

  1. 彻底理解位运算——左移、右移

    相信大家在各种语言各种框架中都能看到二进制的操作.左移.右移.&.|.^等等操作.那么这篇帖子让各位彻底弄懂左移.右移. 首先先区分那个是左移.那个是右移,这很简单,从箭头指向的方向来区分.& ...

  2. 位运算——左移和右移

    <<(左移) 1.运算规则: 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的 空位补零. 2.语法格式: 需要移位的数字 << 移位的次数 例如: 3 & ...

  3. python左移右移位运算_荐Python : 位运算 —— 与、或、异或、左移、右移

    Python : 位运算 -- 与.或.异或.左移.右移 位运算 位运算是把数字用 二进制 表示之后,对每一位上 0 或者 1 的运算.位运算共有 5 种运算:与.或.异或.左移.右移. 与.或.异或 ...

  4. 由Python位运算到原码反码补码

    采用书籍Python核心编程(第二版),人民邮电出版社,2008年7月第1版.本书以Python2.5为主,但笔记主要以Python3.6为主. 一.Python位运算操作符 Python支持标准位运 ...

  5. 移位运算(左移和右移)

    如有转载,请注明出处:  http://www.cnblogs.com/flydoos/archive/2011/09/06/2169280.html 移位运算(左移和右移) 这是网上流传的" ...

  6. 位运算符——左移、右移

    位运算符--左移.右移 >> :右移 最高位是0,左边补齐0;最高为是1,左边补齐1 <<  :左移 左边最高位丢弃,右边补齐0 >>>:无符号右移 无论最高 ...

  7. Python 位运算符号

    Python 位运算符号 文章链接 posted on 2018-06-23 16:32 luoganttcc 阅读(...) 评论(...) 编辑 收藏

  8. Python 位运算的操作

    左移 左移操作用符号<<表示,将对应的二进制数向左移动n位 比如变量a=10,向左移动两位之后得出的结果是20 十进制数10对应的二进制数是0000 1010,那0000 1010左移两位 ...

  9. 位运算——左移右移运算详解

    代码#include "stdio.h"char leftshift(char i, int n) {if(n < 0)return -1;return i<<n ...

最新文章

  1. 重装windows2003遇到的老问题:0X0000007B和显卡驱动安装不上。
  2. callable函数 stride的意义 Math.round(),Math.ceil(),Math.floor()用法
  3. 谈一谈Spring-Mybatis在多数据源配置上的坑
  4. python一次删除多个键值对_Python单击:多个键值对参数
  5. python中int函数的用法浅析_Python中int()函数的用法浅析
  6. XidianOJ 1195 Industry of Orz Pandas
  7. [线程池] ------ 形象的描述线程池,用一个特好记的例子来记忆
  8. C++字符串完全指南(2) - 各种字符串类- CRT类
  9. ubuntu php 中文乱码,Ubuntu环境下,图例中文乱码怎么办?
  10. 重试次数配置_Stelnet(ssh)登陆华为交换机配置教程
  11. 新浪微博PC端登录分析
  12. 支付网关 | 京东618、双11用户支付的核心承载系统(上篇)
  13. [To Selina] 《撒野》读后感
  14. 强化学习的学习之路(四十八)2021-02-17 GAE(Generalized Advantage Estimation)
  15. 对populate()方法的理解
  16. R绘图-KEGG功能注释组间差异分面条形图
  17. tensorflow if语句
  18. 计算机管理的服务打不开,win7系统管理服务打不开的解决方法
  19. 蓝桥杯练习算法题(矩形切割成正方形)
  20. php pdf数字签名,用PHP从PDF中检索数字签名信息

热门文章

  1. KAFKA分布式消息系统
  2. WSDL文件生成WEB service server端C#程序
  3. 无法连接到远程的SQL SERVER2000
  4. 解决MAC系统升级导致COCOAPODS失效问题
  5. ES6学习笔记(二十二)ArrayBuffer
  6. 常用类一一枚举类一一定义和调用
  7. ios学习之旅---指针也不难
  8. lfcp——PB使用
  9. 数据库常用增删改查记录等语句
  10. net与树莓派的情缘-安装与卸载MySql(五)