当前位置: 首页 > article >正文

python 位运算 笔记

起因, 目的:

位运算,令我头疼的地方。算法题里面也是经常见到。

位运算。

  1. 按位或,OR, | , 只要有一个为1, 结果就是1,否则为0
  2. 按位异或,XOR, ^, 2个数不同,结果为1, 否则为0,
    • 可以判断2个数的奇偶性是否相同。
    • 如果2个数的奇偶性相同,结果0
    • 如果2个数的奇偶性不同,结果1
  3. 按位与, AND, &, 都为1, 结果为1
  4. 按位取反,NOT, ~, 把1变为0, 把0变为1

技巧

  1. n & 1, 判断奇偶性.

    • 如果n是奇数,则结果为 1
    • 如果n是偶数,则结果为 0
  2. n >> 1, 右移一位,

    • 相当于除以2之后的整数部分, 即 n//2. 如n=10,则n>>1=5.
  3. n & (n - 1),把 n 的二进制中,最后一个出现的 1 改写成 0。

  4. 移位运算,能大大加速2的n次方运算。

    • 3 << 5 = 3 * 2 ** 5 = 96

异或 运算的基础知识:

概念理解:

  1. 异或,英文为 exclusive OR,缩写成xor, python3: a^b, 3^5
  2. 异或, 满足加法结合律和交换律
  3. 异或, 也叫半加运算, 相当于不带进位的二进制加法
  4. 不是这个就是那个。“我明天要么去北京,要么去上海”
  5. 异或的可逆运算, 本质上还是一个结合律
    49 ^ 213 ^ 213 -> 49 ^ (213 ^ 213) -> 49 ^ 0 -> 49

定律:

  1. 如果有 a^b=c, 必有 a^c=b, 也必然有 b^c=a
  2. if a !=b: a^b=1, if a=b: a^b = 0
  3. a ^ a = 0 a ^ 0 = a # 任何数与 0 异或,都等于它自身。
  4. abc = bca = cba, 这里的交换律是解题的关键。
  5. 一句话总结:
    1. 789 = 879 = 978 = 6,
    2. 其中, 7^8 = 15, 15^9=6
    3. 这个 15 就是中间的一个 中转站。
位运算
  1. 位运算的一个好处是可以节省内存,也许还有其他好处。需要再查查看。
  2. 60 << 2 = 240
    左移动位运算 运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,
    高位丢弃,低位补0。

老哥留步,支持一下。

请求支持


http://www.kler.cn/a/349261.html

相关文章:

  • Docker 教程九 (Docker Dockerfile)
  • python pip安装requirements.txt依赖与国内镜像
  • MySQL的索引类型
  • Java Stream API flatMap()方法介绍
  • KEIL新建51工程
  • 科普向--什么是CI/CD
  • 使用API有效率地管理Dynadot域名,查看域名服务器(Name Server)列表
  • sql的调优指南及高级sql技巧
  • 新装ubuntu22.04必做两件事,不然可能没法用
  • Java微信支付接入(9) - API V3 微信支付查单API
  • Linux的zookeeper安装部署
  • Agent自动执行异常场景下,通过人工介入提高可用性|实在Agent研究
  • FLINK SQL语法(1)
  • Python中的`raise`语句:如何优雅地处理异常?
  • 商标侵权屡禁不止,保护之路何去何从
  • jupyterlab的安装与使用攻略/包括汉化方法
  • 【Redis】Set类型常用命令
  • CSS伪元素详解
  • 【火山引擎】调用火山大模型的方法 | SDK安装 | 配置 | 客户端初始化 | 设置
  • leetcode hot 100 之【LeetCode 283. 移动零】 java实现