超详解——​深入理解Python中的位运算与常用内置函数/模块——基础篇

目录

​编辑

1.位运算

2.常用内置函数/模块

math模块

random模块

decimal模块

常用内置函数

3.深入理解和应用

位运算的实际应用

1.权限管理

2.位图

3.图像处理

2.math模块的高级应用

统计计算

几何计算

总结


1.位运算

位运算是对整数在内存中的二进制表示进行操作的一种方法。在计算机中,数据是以二进制形式存储的,位运算可以直接操作这些二进制位,从而实现高效的数据处理。Python支持以下常见的位运算符:

  1. 按位与(&):两个二进制数对应位都为1时,结果的该位才为1。
  2. 按位或(|):两个二进制数对应位有一个为1,结果的该位就为1。
  3. 按位异或(^):两个二进制数对应位不同,结果的该位为1。
  4. 按位取反(~):将二进制数的每一位取反(0变1,1变0)。
  5. 左移(<<):将二进制数的所有位向左移动指定的位数,右侧补0。
  6. 右移(>>):将二进制数的所有位向右移动指定的位数,左侧补0(对于无符号数)或补符号位(对于有符号数)。
    a = 60  # 二进制:0011 1100
    b = 13  # 二进制:0000 1101
    
    # 按位与
    result = a & b  # 结果:0000 1100 (12)
    print(result)  # 输出:12
    
    # 按位或
    result = a | b  # 结果:0011 1101 (61)
    print(result)  # 输出:61
    
    # 按位异或
    result = a ^ b  # 结果:0011 0001 (49)
    print(result)  # 输出:49
    
    # 按位取反
    result = ~a  # 结果:1100 0011 (-61),在Python中,负数用补码表示
    print(result)  # 输出:-61
    
    # 左移
    result = a << 2  # 结果:1111 0000 (240)
    print(result)  # 输出:240
    
    # 右移
    result = a >> 2  # 结果:0000 1111 (15)
    print(result)  # 输出:15
    
  • 1.按位与(&)

    • 例子:a & b,即 60 & 13
    • 二进制表示:
      • 60:0011 1100
      • 13:0000 1101
    • 结果:0000 1100,即12
  • 2.按位或(|)

    • 例子:a | b,即 60 | 13
    • 二进制表示:
      • 60:0011 1100
      • 13:0000 1101
    • 结果:0011 1101,即61
  • 3.按位异或(^)

    • 例子:a ^ b,即 60 ^ 13
    • 二进制表示:
      • 60:0011 1100
      • 13:0000 1101
    • 结果:0011 0001,即49
  • 4.按位取反(~)

    • 例子:~a,即 ~60
    • 二进制表示:
      • 60:0011 1100
      • ~60:1100 0011(补码表示)
    • 结果:-61(Python使用补码表示负数)
  • 5.左移(<<)

    • 例子:a << 2,即 60 << 2
    • 二进制表示:
      • 60:0011 1100
      • 左移2位:1111 0000
    • 结果:240
  • 6.右移(>>)

    • 例子:a >> 2,即 60 >> 2
    • 二进制表示:
      • 60:0011 1100
      • 右移2位:0000 1111
    • 结果:15

2.常用内置函数/模块

Python提供了丰富的内置函数和模块,方便进行各种计算和操作。以下是一些常用的内置函数和模块:

math模块

math模块提供了许多数学函数,如平方根、对数、三角函数等。

import math

print(math.sqrt(16))  # 4.0,计算平方根
print(math.log(8, 2))  # 3.0,以2为底的对数
print(math.sin(math.pi / 2))  # 1.0,计算正弦值

random模块

random模块用于生成随机数。

import random

print(random.randint(1, 10))  # 生成1到10之间的随机整数
print(random.random())  # 生成0到1之间的随机浮点数
print(random.choice(['a', 'b', 'c']))  # 从列表中随机选择一个元素

decimal模块

decimal模块提供对十进制浮点数的精确计算。

from decimal import Decimal

a = Decimal('0.1')
b = Decimal('0.2')
c = a + b
print(c)  # 0.3,精确的十进制计算

常用内置函数

Python的内置函数简化了许多基本操作,例如计算绝对值、最大值、最小值、和等。

print(abs(-5))  # 5,计算绝对值
print(max(1, 2, 3))  # 3,返回最大值
print(min(1, 2, 3))  # 1,返回最小值
print(sum([1, 2, 3]))  # 6,计算和

3.深入理解和应用

通过上面的例子,我们了解了Python中位运算的基本用法和一些常用内置函数/模块的使用。接下来,我们可以深入探讨一些应用场景和实际问题,进一步巩固这些知识。

位运算的实际应用

1.权限管理

  • 在系统权限管理中,常常使用位运算来表示和检查权限。每个权限可以用一个二进制位表示,多个权限可以通过按位或(|)组合在一起。
    READ = 0b0001
    WRITE = 0b0010
    EXECUTE = 0b0100
    
    permission = READ | WRITE
    
    def has_permission(perm, check):
        return perm & check == check
    
    print(has_permission(permission, READ))  # True
    print(has_permission(permission, EXECUTE))  # False
    

    2.位图

位图(bitmap)是一种使用位来表示集合的数据结构,常用于高效的集合运算和压缩存储。

bitmap = 0

def add_to_bitmap(bitmap, value):
    return bitmap | (1 << value)

def check_bitmap(bitmap, value):
    return bitmap & (1 << value) != 0

bitmap = add_to_bitmap(bitmap, 3)
bitmap = add_to_bitmap(bitmap, 5)

print(check_bitmap(bitmap, 3))  # True
print(check_bitmap(bitmap, 4))  # False

3.图像处理

  • 位运算在图像处理中的应用也非常广泛,例如图像的掩膜操作、颜色通道的分离和合并等。
    def apply_mask(value, mask):
        return value & mask
    
    def combine_channels(r, g, b):
        return (r << 16) | (g << 8) | b
    
    mask = 0xFF
    value = 0x123456
    masked_value = apply_mask(value, mask)
    print(hex(masked_value))  # 0x56
    
    r = 0x12
    g = 0x34
    b = 0x56
    combined_value = combine_channels(r, g, b)
    print(hex(combined_value))  # 0x123456
    

    2.math模块的高级应用

  • 统计计算

    • 使用math模块可以进行一些基本的统计计算,例如平均值、标准差等。
      import math
      
      data = [2, 4, 4, 4, 5, 5, 7, 9]
      
      def mean(data):
          return sum(data) / len(data)
      
      def variance(data):
          m = mean(data)
          return sum((x - m) ** 2 for x in data) / len(data)
      
      def std_dev(data):
          return math.sqrt(variance(data))
      
      print(mean(data))  # 5.0
      print(std_dev(data))  # 2.0
      

      几何计算

    • math模块中的三角函数可以用于几何计算,例如计算三角形的面积、圆的周长和面积等。
      import math
      
      def triangle_area(a, b, c):
          s = (a + b + c) / 2
          return math.sqrt(s * (s - a) * (s - b) * (s - c))
      
      def circle_area(radius):
          return math.pi * radius ** 2
      
      def circle_circumference(radius):
          return 2 * math.pi * radius
      
      print(triangle_area(3, 4, 5))  # 6.0
      print(circle_area(3))  # 28.274333882308138
      print(circle_circumference(3))  # 18.84955592153876
      

      总结

      Python在处理低级别二进制操作和高级别数学计算上的强大功能。位运算提供了高效的数据处理手段,尤其在权限管理、位图处理和图像处理等领域具有重要应用。而内置的数学和随机数函数则为科学计算、数据分析等领域提供了强大的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/704507.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android Uri转File path路径,Kotlin

Android Uri转File path路径&#xff0c;Kotlin /*** URI转化为file path路径*/private fun getFilePathFromURI(context: Context, contentURI: Uri): String? {val result: String?var cursor: Cursor? nulltry {cursor context.contentResolver.query(contentURI, null…

设计模式-创建型-04-建造者模式

1、盖房项目需求 1&#xff09;需要建房子&#xff1a;这一过程为打桩、砌墙、封顶2&#xff09;房子有各种各样的&#xff0c;比如普通房&#xff0c;高楼&#xff0c;别墅&#xff0c;各种房子的过程虽然一样&#xff0c;但是要求不要相同的3&#xff09;请编写程序&#xf…

模拟信号转RS-485/232,数据采集A/D转换模块 YL21

特点&#xff1a; ● 模拟信号采集&#xff0c;隔离转换 RS-485/232输出 ● 采用12位AD转换器&#xff0c;测量精度优于0.1% ● 通过RS-485/232接口可以程控校准模块精度 ● 信号输入 / 输出之间隔离耐压3000VDC ● 宽电源供电范围&#xff1a;8 ~ 32VDC ● 可靠性高&…

【Axure高保真原型】拖拉拽动态编辑可视化页面

今天和大家分享拖拉拽动态编辑可视化页面的原型模板&#xff0c;我们可以拖动左侧工具列表的图表&#xff0c;添加到页面&#xff0c;可以多次添加&#xff0c;添加后可以拖动图表的位置&#xff0c;或者鼠标移入图表后点击delete键删除多余的图表&#xff0c;案例中提供10中常…

我国间二甲苯零售规模逐渐扩大 进口量有所下滑

我国间二甲苯零售规模逐渐扩大 进口量有所下滑 间二甲苯&#xff08;MX&#xff09;又称为1,3-二甲苯&#xff0c;是苯的两个氢基被两个甲基取代后形成的一种有机化合物。间二甲苯的化学方程式为C8H10&#xff0c;多表现为一种无色透明的液体&#xff0c;不溶于水&#xff0c;但…

Pikachu上的CSRF以及NSSCTF上的[NISACTF 2022]bingdundun~、 [SWPUCTF 2022 新生赛]xff

目录 一、CSRF CSRF(get) login CSRF(post) CSRF Token 二、CSRF的相关知识点 &#xff08;1&#xff09;什么是CSRF&#xff1f; &#xff08;2&#xff09;工作原理 &#xff08;3&#xff09;CSRF漏洞形成的条件 1、用户要在登录状态&#xff08;即浏览器保存了该…

资源付费系统小程序APP公众号h5源码

&#x1f510; 揭秘“资源付费系统”&#xff1a;知识、技能与价值的交汇点 &#x1f48e; &#x1f31f; 引言&#xff1a;为何资源需要付费&#xff1f; 在数字化时代&#xff0c;我们周围充斥着大量的信息。但并非所有信息都具有同等的价值。其中&#xff0c;那些经过精心…

深度学习(四)——torchvision中数据集的使用

1. 参数详解 torchvision中每个数据集的参数都是大同小异的&#xff0c;这里只介绍CIFAR10数据集 该数据集的数据格式为PIL格式 class torchvision.datasets.CIFAR10(root:str,train:boolTrue,transform:Optional[Callable]None,target_transform:Optional[Callable]None,do…

Intel 8080接口与Motorola 6800接口定义与应用

本文介绍Intel 8080接口与Motorola 6800接口定义与应用。 Intel 8080接口与Motorola 6800接口是常用的并行总线接口&#xff0c;在MCU与外设直接的接口中经常用到&#xff0c;如MCU与LCD接口&#xff0c;MCU与FPGA之间的接口。本文介绍Intel 8080接口与Motorola 6800接口定义&…

R语言数据探索和分析23-公共物品问卷分析

第一次实验使用最基本的公共物品游戏&#xff0c;不外加其他的treatment。班里的学生4人一组&#xff0c;一共44/411组。一共玩20个回合的公共物品游戏。每回合给15秒做决定的时间。第十回合后&#xff0c;给大家放一个几分钟的“爱心”视频&#xff08;链接如下&#xff09;&a…

第一个Vue3.0应用程序

Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以胜任。 1、准备工作 工欲善其事&#…

简单2招,学会文件粉碎!告别文件安全顾虑

在数字化时代&#xff0c;电脑文件中可能存储着大量的敏感信息&#xff0c;涉及个人隐私、财务数据等。为了更有效地保护这些信息不被滥用或泄露&#xff0c;我们需要更加安全的删除文件的方法。电脑文件粉碎是一种高级的文件删除技术&#xff0c;可以确保被删除的文件无法被恢…

多个协程操纵同一个数据2个锁【互斥锁】【读写锁】

golang中sync包实现了两种锁Mutex&#xff08;互斥锁&#xff09;和RWMutex(读写锁) 【1】互斥锁&#xff08;和上厕所一样&#xff0c;用的时候把门锁上&#xff0c;不用的时候把门给关上&#xff09; 其中Mutex为互斥锁&#xff0c;Lock()加锁&#xff0c;Unlock()解锁&#…

申请郑州水污染防治乙级资质,这些材料你需要提前准备

申请郑州水污染防治乙级资质时&#xff0c;你需要提前准备以下材料&#xff0c;以确保申请流程的顺利进行&#xff1a; 一、企业基本材料 企业法人营业执照副本复印件&#xff1a;需加盖企业公章&#xff0c;确保复印件清晰、完整。企业章程文本&#xff1a;提供企业章程的完整…

Map - LinkedHashSetMap源码解析

本文主要对Map - LinkedHashSet&Map 源码解析。立刀旁 Map - LinkedHashSet&Map源码解析 Java 7 - LinkedHashSet&Map 总体介绍方法剖析 get()put()remove()LinkedHashSetLinkedHashMap经典用法 # Java 7 - LinkedHashSet&Map # 总体介绍 如果你已看过前面关…

【git使用二】gitee远程仓库创建与本地git命令用法

目录 gitee介绍 管理者注册gitee账号 管理者在gitee网站上创建远程仓库 每个开发者安装git与基本配置 1.git的下载和安装 2.配置SSH公钥 3.开发者信息配置 git命令用法 gitee介绍 Gitee&#xff08;又称码云&#xff09;是一个基于Git的代码托管服务&#xff0c;由开源…

高考后的抉择:计算机相关专业的未来发展与前景探讨

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

首个对LLMs应用于机器人任务中的量化研究

论文标题&#xff1a; Neural Scaling Laws for Embodied AI 论文作者&#xff1a; Sebastian Sartor, Neil Thompson 导读&#xff1a; 大模型研究愈发火热&#xff0c;大语言模型的Neural Scaling Laws&#xff08;神经标度律/神经缩放定律&#xff09;&#xff0c;即深度…

最快安装zabbix

部署zabbix 6.x 建议使用红帽系统。 https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.9-x86_64-minimal.iso1> 配置安装yum源 [rootzabbix ~]# yum install https://mirrors.huaweicloud.com/zabbix/zabbix/6.2/rhel/8/x86_64/zabbix-release-6.2-3.el8…

【CT】LeetCode手撕—21. 合并两个有序链表

目录 题目1-思路2- 实现⭐21. 合并两个有序链表——题解思路 3- ACM实现 题目 原题连接&#xff1a;21. 合并两个有序链表 1-思路 双指针&#xff1a;题目提供的 list1 和 list2 就是两个双指针 通过每次移动 list1 和 list2 并判断二者的值&#xff0c;判断完成后将其 插入…