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

【玩转python】入门篇day11-位运算

1、位运算语法

计算机中所有的数据都是以二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、、/)都是叫位运算,相比在代码中直接使用(+、-、、/)运算符,合理的运用位运算更能显著提高代码在机器上的执行效率。

举一个简单的例子来看下 CPU 是如何进行计算的,比如这行代码:
int a = 35;
int b = 47;
int c = a + b;

计算两个数的和,因为在计算机中都是以二进制来进行运算,所以上面我们所给的 int 变量会在机器内部先转换为二进制在进行相加:

35:  0 0 1 0 0 0 1 1
47:  0 0 1 0 1 1 1 1
————————————————————
82:  0 1 0 1 0 0 1 0

按位与(&):

  • 两个对应的位都是1时结果才为1,否则为0。
  • 示例:5 & 3 = 1(即 0101 & 0011 = 0001)

按位或(|):

  • 两个对应的位中只要有一个是1,结果就为1。
  • 示例:5 | 3 = 7(即 0101 | 0011 = 0111)

按位异或(^):

  • 两个对应的位不同则结果为1,相同则结果为0。
  • 示例:5 ^ 3 = 6(即 0101 ^ 0011 = 0110)

按位取反(~):

  • 将每个位上的1变成0,0变成1。
  • 示例:~5 = -6(在有符号整数中,二进制表示会有所不同,取决于补码表示法)

左移(<<):

  • 将所有位向左移动指定的位数,右边空出的位置用0填充。
  • 示例:5 << 1 = 10(即 0101 << 1 = 1010)

右移(>>):

  • 将所有位向右移动指定的位数,左边空出的位置根据整数是有符号还是无符号来填充0或原最高位的值。
  • 示例:5 >> 1 = 2(即 0101 >> 1 = 0010)

2、位运算常用场景

(1)交换两个数的值

交换ab的值,原理就是ab异或之后得到c 然后c和其中任意一位数异或得到另外一位

a:11011
b:10100
a = a ^ b # 第一次异或a变成两个数的结果,b没变 
b = b ^ a # b 异或他们的结果得到a
a = a ^ b 

(2)快速判断奇偶性

使用按位与运算可以快速判断一个整数是否为偶数。由于任何偶数的二进制表示最后一位都是0,而奇数最后一位是1,

  • 因此可以使用 n & 1 的结果来判断:
  • 如果结果为0,则n是偶数。
  • 如果结果为1,则n是奇数。

(3)判断整数是否为2的幂

一个正整数如果是2的幂,那么它在二进制表示中仅有一位为1,其余位都为0。例如,8(即1000)是2的幂。你可以通过将该数与其减1后的数做按位与运算来判断:

  • 如果 n & (n - 1) 的结果为0,并且n不为0,那么n是2的幂。

(4)实现快速乘法和除法

利用左移和右移运算可以实现快速的乘法和除法:

  • 左移一位相当于乘以2。
  • 右移一位相当于除以2。

相关文章:

【玩转python】入门篇day11-位运算

1、位运算语法 计算机中所有的数据都是以二进制的形式存储在设备中。即 0、1 两种状态&#xff0c;计算机对二进制数据进行的运算(、-、、/)都是叫位运算&#xff0c;相比在代码中直接使用(、-、、/)运算符&#xff0c;合理的运用位运算更能显著提高代码在机器上的执行效率。 …...

【Gitlab】记一次升级 Gitlab 后 API 失效的问题

背景 前段时间&#xff0c;因内部使用的 Gitlab 版本存在漏洞&#xff0c;需要进行升级&#xff0c;于是乎&#xff0c;将 Gitlab 从 16.6.0 升级到 16.11.3。而我们项目有个接口是用于获取 Gitlab 上的开发人员。 然后&#xff0c;今天&#xff0c;突然发现这个接口获取不到…...

2024.7.19 作业

1.链表的排序 int list_sort(NodePtr L) {if(NULLL || L->len<1){printf("排序失败");return -1;}int lenL->len1;NodePtr p;int i,j;for( i1;i<len;i){for( j0,pL;j<len-i;j,pp->next){if( p->data > p->next->data ){datatype tp-&…...

python如何创建SQLite 数据库连接,如何将数据库存储在内存中?

嗨&#xff0c;大家好&#xff0c;我是兰若姐姐。今天给大家说下如何创建SQLite 数据库连接,并将数据库存储在内存中,这是一种临时的、私有的数据存储空间&#xff0c;一般用于以下情形&#xff1a; 什么都不说&#xff0c;先上代码&#xff1a; import sqlite3创建数据库连接…...

机器学习-20-基于交互式web应用框架streamlit的基础使用教程

参考简洁而优雅地展示你的算法和数据——streamlit教程(一) 原理介绍与布局控制 参考Streamlit 讲解专栏(二):搭建第一个应用 Streamlit 讲解专栏(三):两种方案构建多页面 Streamlit 讲解专栏(五):探索强大而灵活的 st.write() 函数 1 streamlit 1.1 运行原理 im…...

基于luckysheet实现在线电子表格和Excel在线预览

概述 本文基于luckysheet实现在线的电子表格&#xff0c;并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …...

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(一)-3GPP TS 23.256 技术规范概述

3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 以下是文档的核心内容总结&#xff1a; UAV系…...

sqlalchemy_dm

1、参考文档&#xff1a; https://blog.csdn.net/njcwwddcz/article/details/126554118 https://eco.dameng.com/document/dm/zh-cn/pm/dmpython-dialect-package.html 2、生成工具 sqlalchemy2.0.0.zip 3、安装步骤 conda create --name kes --clone kes1 rz unzip sql…...

基于springboot+vue+uniapp的驾校预约平台小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

echarts实现3d柱状效果

代码如下&#xff0c;单个的调第一个方法&#xff0c;多个柱状的调第二个方法&#xff0c;具体情况修改参数或者二次开发即可 //3d柱状图 export function getEcharts3DBar (xAxisData:string[][name1,name2,name3], data:number[][1,2,3], colorObj:IBaseObject{topStartColo…...

Flask校验

WTForms 是一个 Python 库&#xff0c;用于处理和验证 Web 表单。它提供了很多功能来简化表单处理&#xff0c;包括字段类型、验证器、错误消息等。在 WTForms 中&#xff0c;validate 机制是用于确保表单数据满足特定条件的关键部分。 1.验证器&#xff08;Validators&#x…...

web前端 Vue 框架面试120题(一)

面试题 1 . 简述Vue的MVVM 模式? 参考回答&#xff1a; MVVM 是 Model-View-ViewModel的缩写&#xff0c;即将数据模型与数据表现层通过数据驱动进行分离&#xff0c;从而只需要关系数据模型的开发&#xff0c;而不需要考虑页面的表现&#xff0c;具体说来如下&#xff1a;M…...

UniApp__微信小程序项目实战 实现长列表分页,通过 onReachBottom 方法上划分次加载数据

UniApp 实现长列表分页&#xff0c;通过 onReachBottom 方法上划分次加载数据 项目实战中比较常见&#xff0c;方便下次使用 文章目录 一、应用场景? 二、作用 三、使用步骤&#xff1f;          3.1 实现的整体思路&#xff1f;    …...

数据结构(功能受限的表-栈队列)

功能受限的表结构 一、栈和队列介绍 栈和队列是两种重要的线性结构&#xff0c;从数据结构角度&#xff0c;他们都是线性表&#xff0c;特殊点在于它们的操作被限制&#xff0c;也就是所谓的功能受限&#xff0c;统称功能受限的线性表 从数据类型角度&#xff0c;它们也可以是…...

高数知识补充----矩阵、行列式、数学符号

矩阵计算 参考链接&#xff1a;矩阵如何运算&#xff1f;——线性代数_矩阵计算-CSDN博客 行列式计算 参考链接&#xff1a;实用的行列式计算方法 —— 线性代数&#xff08;det&#xff09;_det线性代数-CSDN博客 参考链接&#xff1a;行列式的计算方法(含四种&#xff0c;…...

《Techporters架构搭建》-Day01 第一个RESTful API接口

微服务架构搭建 搭建微服务架构分析一下项目的build.gradle添加Demo接口 搭建微服务架构 首先搭建系统管理模块&#xff0c;模块结构如下 tps-cloud └── tps-system -- 系统管理模块└── tps-system-api -- 系统管理模块公共api模块└── tps-system-biz -- 系统管理模…...

【C++ —— AVL树】

C —— AVL树 AVL树的概念AVL树节点的定义AVL树的插入向上调整旋转左单旋右单旋左右双旋右左双旋 AVL树的高度AVL树的验证总结&#xff1a;代码 AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素…...

跨平台webSocket模块设计技术解决方案

1. 概述 目标&#xff1a;设计并实现一个能够在多种操作系统上运行的WebSocket通讯模块&#xff0c;支持与前端浏览器和HTTPS服务端进行数据交换。技术栈&#xff1a;C11 &#xff0c;使用跨平台库如 Boost处理网络IO&#xff0c;使用 JSON 库如 nlohmann/json 解析消息。 2.…...

Drools规则引擎

一、Drools规则引擎 Drools官网&#xff1a; https://www.drools.org/Drools中文网: http://www.drools.org.cn/bilibili学习视频(黑马博学谷2020年最新Java项目Drools业务规则管理系统&#xff08;BRMS&#xff09;)&#xff1a; https://www.bilibili.com/video/BV1Pa4y1a7u…...

vue学习day11-路由、路由模块的封装、声明式导航-路由的介绍、VueRouter、router-link、自定义高亮类名

32、路由 &#xff08;1&#xff09;路由的介绍 1&#xff09;生活中的路由&#xff1a;设备和ip的映射关系 2&#xff09;路由&#xff1a;一种映射关系 3&#xff09;Vue中的路由&#xff1a;路径与组件的映射关系 &#xff08;根据路由就能知道不同的路径&#xff0c;应…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...