Python中位运算详解

✨前言:

在Python中,位运算用于直接操纵数值的二进制位。以下是Python中的几种位运算符,每个位运算符的功能及其使用实例:

✨按位与(AND) - &

当两个操作数的位都为1时,结果的相应位才是1,否则是0。
📌例如:

a = 60           # 60 = 0011 1100
b = 13           # 13 = 0000 1101
c = a & b        # 12 = 0000 1100
print(c)         

✨按位或(OR) - |

只要两个操作数中的一个位是1,结果的相应位就是1。
📌例如:

a = 60           # 60 = 0011 1100
b = 13           # 13 = 0000 1101
c = a | b        # 61 = 0011 1101
print(c)         

✨按位异或(XOR) - ^

当两个操作数中的位相异时,结果的相应位是1。
📌例如:

a = 60           # 60 = 0011 1100
b = 13           # 13 = 0000 1101
c = a ^ b        # 49 = 0011 0001
print(c)         

✨按位取反 - ~

计算机内部在做数学运算时(也就是计算机的0和1的运算),都是以补码为标准的,说白了计算机中就一种码那就是补码,而现实社会中的编码规则,例如原码、反码都是我们自定义的,为了和计算机中的补码形成转换关系。所以说在我们手工计算这类由计算机计算的01运算,要站在计算机的角度。因此首先就要将我们的原码反码全都先转为补码,再来计算.
正数的原、反、补码都是它本身;负数的原码最高位为1开头,反码是最高符号位不变,其余位在原码的基础上取反,补码是在反码的基础上+1即可得到.
在Python中按位取反是使用波浪符号 ~ 操作符来完成的。按位取反操作翻转二进制表示中的所有位:将0变为1,将1变为0。

由于Python使用的是补码来表示整数,了解按位取反操作时需要记住以下几点:

对于非负整数,位取反操作的结果是:~x == -(x + 1)
对于负整数,位取反操作的结果是:~x == -(x + 1),其中 x 是负数的原码。
📌例如:

a = 10                    # 10的二进制表示: 0000 1010
complement_a = ~a         # 按位取反后的值: 1111 0101 (这里的表示是补码)print(complement_a)       # 输出: -11

在进行按位取反操作时,结果不是简单地翻转了二进制中的位;事实上,结果是得到了操作数的补码形式。在这个例子中,10的二进制表示是0000 1010(考虑到8位整数,没有考虑符号位),当我们对10进行按位取反时,我们得到一个新的二进制表示1111 0101,这个新的二进制数是-11的补码表示。
为了解释这个结果,这里的关键是理解Python中整数是以补码形式存储的,因此按位取反后得到的实际上是补码表示的反码(即所有位取反),再加上1得到的补码。而由于整数位数不固定,所以实际上是按当前整数所占位数的配额进行取反(不仅仅是8位或32位)。结果是得到与原来的整数相反的数,并且比原来的数小1。
简单来说按位取反符号为~ ,它对于任何数字x的效果可以表示为-x - 1。

✨左移 - <<

把一个数的所有位向左移动指定的位数,右边空出的位用0填充。

📌例如:

a = 60           # 60 = 0011 1100
c = a << 2       # 240 = 1111 0000
print(c)         

✨右移 - >>

把一个数的所有位向右移动指定的位数,对于无符号数,左边空出的位用0填充,对于有符号数,根据具体实现可能用符号位填充。

📌例如:

a = 60           # 60 = 0011 1100
c = a >> 2       # 15 = 0000 1111
print(c)         

注意:以上给出的二进制形式是为了方便理解,Python会将它存储为数值的补码形式。对于位取反操作,你可能注意到结果不如你预期,因为Python中的整数是以补码形式存储的,并且Python中的整数位数是不固定的(不像C和C++中的32或64位整数),所以按位取反会影响所有的位,包括符号位。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx日志管理之错误日志配置

Nginx 的错误日志可以帮助用户及时判断 Nginx 配置及运行时出错的原因&#xff0c;错误日志也可以通过 Nginx 内置指令进行配置&#xff0c;但不支持格式定义。配置指令如下表所示。 说明 错误日志指令组成主指令error_log作用域main、http、mail、stream、server、location默…

坐标传送指令

目录 主城传送 联盟 部落 中立 副本传送 旧世界&#xff08;Vanilla 1.0&#xff09; 燃烧的远征&#xff08;TBC 2.0&#xff09; 巫妖王之怒&#xff08;WLK 3.0&#xff09; 大灾变&#xff08;CTM 4.0&#xff09; 熊猫人之谜&#xff08;MOP 5.0&#xff09; 德…

Xlua三方库Android编译出错解决办法

Xlua三方库Android编译出错解决办法 最近听老师的热更教程&#xff0c;讲到xlua编译android平台会报错&#xff0c;也是看了老师的博客&#xff0c;按照方法去解决&#xff0c;然而问题并没有解决。应该是因为代码更新或者版本不一样&#xff0c;在此简单记录一下解决过程。 参…

Node.js 事件循环的工作流程

Node.js 的事件循环由六个主要阶段组成&#xff0c;每个阶段都有一个或多个回调队列。事件循环依次遍历这些阶段&#xff0c;并在每个阶段执行相应的回调函数。具体的流程如下&#xff1a; Timers&#xff08;计时器阶段&#xff09;&#xff1a; 执行已到期的 setTimeout 和 s…

js 获取get请求请求时间

要获取GET请求的响应时间&#xff0c;可以使用JavaScript的XMLHttpRequest对象。以下是一个示例&#xff1a; function getResponseTime(url, callback) {var xhr new XMLHttpRequest();var startTime new Date().getTime();xhr.onreadystatechange function() {if (xhr.re…

[RPI4] 树莓派4b安装istoreos及使用 -- 1. 系统安装

最近在研究家庭智能化的一些东西,其中包括网络,智能家居等一系列内容,然后看过的资料有的想再回来看的时候就找不到了,然后就想着开这么一个系列,做一些记录,先从智能家居开始吧。 1 安装istoreos系统 iStoreOS 目标是提供一个人人会用的路由兼轻 NAS 系统,不管是作为路…

Transformer预测 | 基于Transformer的风电功率多变量时间序列预测(Matlab)

文章目录 预测效果文章概述模型描述程序设计参考资料预测效果 文章概述 Transformer预测 | 基于Transformer的风电功率多变量时间序列预测(Matlab) Transformer 模型本质上都是预训练语言模型,大都采用自监督学习 (Self-supervised learning) 的方式在大量生语料上进行训练,…

python桌面应用

py文件 import osimport wx import wx.html2class MyFrame(wx.Frame):def __init__(self, parent):wx.Frame.__init__(self, parent, title"启动啦", size(1000, 700))# 创建一个Web视图组件self.browser wx.html2.WebView.New(self)# 加载本地HTML文件# self.brow…

考研数学|《李林880》正确率多少算合格?

李林880题是针对考研数学三的练习题集&#xff0c;覆盖了考研数学三的主要知识点和题型。如果能够熟练掌握这些题目&#xff0c;意味着对考研数学三的知识点有了较为深入的理解和应用能力。 首先&#xff0c;考研数学三的总分是150分&#xff0c;题型包括单选题、填空题和解答…

RN开发搬砖经验之—“Calculated frame index should never be lower than 0“崩溃问题分析

问题重现 崩溃堆栈&#xff1a; Back traces starts. java.lang.RuntimeException: java.lang.IllegalStateException: Calculated frame index should never be lower than 0at com.facebook.react.animated.NativeAnimatedModule$1.doFrameGuarded(NativeAnimatedModule.ja…

PostgreSQL中 GROUPING SETS、CUBE 和 ROLLUP功能

PostgreSQL 中&#xff0c;GROUPING SETS、CUBE 和 ROLLUP 的功能&#xff0c;允许在查询中更灵活地生成聚合结果&#xff0c;而不需要多次重写查询或使用复杂的 UNION 语句。这些功能在数据分析中特别有用&#xff0c;因为它们允许你以不同的维度对数据进行分组和聚合。 1、测…

持久化容器数据

持久化容器数据 目录 容器卷管理卷试一试 使用卷查看卷内容删除卷 当一个容器启动时&#xff0c;它会使用镜像提供的文件和配置。每个容器可以创建、修改和删除文件&#xff0c;并且不会影响其他容器。当容器被删除时&#xff0c;这些文件更改也会被删除。 虽然容器的这种短…

【因果推断python】53_效应异质性和非线性带来的挑战1

目录 Treatment Effects on Binary Outcomes 合成一些数据 由于缺乏基本事实&#xff0c;在单位层面预测治疗效果极为困难。因为我们只能观察到一个潜在结果 T(t) &#xff0c;我们无法直接估计它。相反&#xff0c;我们必须依靠目标变换&#xff08;也可以看作是设计巧妙的损…

【专利】一种光伏产品缺陷检测AI深度学习算法

申请号CN202410053849.9公开号&#xff08;公开&#xff09;CN118037635A申请日2024.01.12申请人&#xff08;公开&#xff09;超音速人工智能科技股份有限公司发明人&#xff08;公开&#xff09;张俊峰(总); 叶长春(总); 廖绍伟 摘要 本发明公开一种光伏产品缺陷检测AI深度…

全国计算机二级C++题库笔记

全国计算机二级C题库笔记 Ⅰ. 选择题专项训练1 公共基础部分2 二级C程序设计第1~4章》每章标题1. C标识符命名规则2. 面向对象的三个主要特征3. C的四个开发步骤4. 关于类和对象的叙述5. !和&&的作用6. C枚举类型初值问题7. ASCII码对照表8. 运算符两边的数据类型&…

linux高级编程(I/O)

fputc int fputc(int c, FILE *stream); 功能: 向流中写入一个字符 参数: c:要写入的字符 stream:文件流指针 返回值: 成功返回写入的字符ASCII码值 失败返回EOF fgetc int fgetc(FILE *stream); 功能: 从流中读取一个字符 参数: stream:文件流…

SAPUI5基础知识8 - 模块(Module)的使用

1. 背景 在SAPUI5中&#xff0c;几乎所有东西都是一个模块&#xff08;例如&#xff1a;控件&#xff0c;控制器&#xff0c;组件等等&#xff09;&#xff0c;通过依赖管理&#xff0c;模块间可以相互调用。这样做的好处是&#xff0c;可以仅在需要时才去加载必需的模块&…

基于单片机的智能台灯控制系统

摘要&#xff1a; 文章设计一款单片机智能台灯控制系统&#xff0c;实现对台灯的手动和自动控制功能&#xff0c;以 STC89C52 单片机作为多功能智能台灯的主控制器&#xff0c;光电检测模块检测坐姿&#xff0c;红外传感器检测人体&#xff0c;光敏电阻检测光强&#xff0c;同…

怀庄酒厂在茅台镇排第几,怀庄酒都什么档次?

怀庄酒厂在茅台镇的排名如何&#xff1f;怀庄酒又属于什么档次&#xff1f;贵州怀庄酒业(集团)有限责任公司旗下的怀庄之醉&#xff0c;作为公司的重点直营品牌&#xff0c;定位于中高端酱酒市场&#xff0c;以其出色的品质和独特的风味受到消费者的青睐。 在众多贵州酒厂中&am…

搭建淘宝扭蛋机小程序需要满足哪些条件

随着移动互联网的快速发展&#xff0c;小程序作为一种轻量级应用&#xff0c;以其便捷、高效的特点&#xff0c;逐渐成为了用户日常生活中不可或缺的一部分。特别是在电商平台中&#xff0c;小程序为商家和用户之间提供了更为直接的沟通桥梁。在这样一个背景下&#xff0c;搭建…