位运算的应用

位运算的原理及应用(C++) 摘要:位运算是计算机领域中常用的一种操作方式,它直接对二进制数据进行操作,具有高效、灵活等优点。本文将介绍位运算的基本原理和常见的应用场景,以及在C++语言中如何使用位运算操作。通过学习位运算的相关知识,我们能够更好地理解计算机底层的运算机制,并且能够在实际的程序开发中灵活运用位运算,提高代码执行效率。 阅读详情
位运算符有:&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。
优先级从高到低,依次为~、&、^、|,

位运算符的一些简单应用:
按位与运算有两种典型用法,一是取一个位串信息的某几位,如以下代码截取x的最低7位:x &0177。二是让某变量保留某几位,其余位置0,如以下代码让x只保留最低6位:x = x &077。

按位或运算的典型用法是将一个位串信息的某几位置成1。如将要获得最右4为1,其他位与变量j的其他位相同,可用逻辑或运算017|j

按位异或运算的典型用法是求一个位串信息的某几位信息的反。如欲求整型变量j的最右4位信息的反,用逻辑异或运算017^j,就能求得j最右4位的信息的反,即原来为1的位,结果是0,原来为0的位,结果是1。交换两个值,不用临时变量,假如a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:
a=a^b; b=b^a; a=a^b;

取反运算常用来生成与系统实现无关的常数。如要将变量x最低6位置成0,其余位不变,可用代码x = x &~077实现。以上代码与整数x用2个字节还是用4个字节实现无关。
当两个长度不同的数据进行位运算时(例如long型数据与int型数据),将两个运算分量的右端对齐进行位运算。如果短的数为正数,高位用0补满;如果短的数为负数,高位用1补满。如果短的为无符号整数,则高位总是用0补满。

位运算用来对位串信息进行运算,得到位串信息结果。如以下代码能取下整型变量k的位串信息的最右边为1的信息位:((k-1)^k)& k。

对于带符号的数据,如果移位前符号位为0(正数),则左端也是用0补充;如果移位前符号位为1(负数),则左端用0或用1补充,取决于计算机系统。对于负数右移,称用0补充的系统为“逻辑右移”,用1补充的系统为“算术右移”。以下代码能说明读者上机的系统所采用的右移方法:
printf("%d\n\n\n", -2>>4);
若输出结果为-1,是采用算术右移;输出结果为一个大整数,则为逻辑右移。

移位运算与位运算结合能实现许多与位串运算有关的复杂计算。设变量的位自右至左顺序编号,自0位至15位,有关指定位的表达式是不超过15的正整数。以下各代码分别有它们右边注释所示的意义:
(1) 判断int型变量a是奇数还是偶数,尤其是对大数的判断
a&1 == 0 偶数
a&1 == 1 奇数
(2) 取int型变量a的第k位 (k=0,1,2……sizeof(int))
a>>k&1
(3) 将int型变量a的第k位清0
a=a&~(1<<k)
(4) 将int型变量a的第k位置1
a=a|(1<<k)
(5) int型变量循环左移k次
a=a<<k|a>>16-k(设sizeof(int)=16)
(6) int型变量a循环右移k次
a=a>>k|a<<16-k(设sizeof(int)=16)
(7) 实现最低n位为1,其余位为0的位串信息:
~(~0 << n)
(8)截取变量x自p位开始的右边n位的信息:
(x >> (1+p-n)) & ~(~0<< n)
(9)截取old变量第row位,并将该位信息装配到变量new的第15-k位
new |= ((old >> row)& 1) << (15 –k)
(10)设s不等于全0,代码寻找最右边为1的位的序号j:
for(j = 0; ((1 << j)& s) == 0; j++) ;
位运算性质及应用 位运算的性质分配律结合律交换律其它一些应用 写在前面: 位运算时每一位都是独立的, 都可以拆开运算。(扩: 每个进制位的加减运算都可以独立进行, 这也是数位DP的状态分析和转移方式。) 分配律 a&(b|c) = (a&b)|(a&c) a^(b|c)=(a ^ b) | (a ^ c) 结合律 (a|b)|c = a|(b|c) (a&b)&c = a&a... 阅读详情

相关推荐

Java位运算详解与应用

位运算是处理二进制数据的基础,它可以用来表示和操作计算机内的数据。在数据压缩、加密算法、网络协议等领域,位运算都是不可或缺的工具。例如,在设计一种新的数据压缩算法时,我们可以利用位运算来处理数据的二进制位,通过位移和逻辑运算来提高数据的压缩率和效率。

weixin_36064575的博客 1104

位运算及其应用

1.位运算优势以及优先级2.位运算和逻辑运算符的对比3.位运算的应用(获取最后一位,快速取模,交换两数,幂运算等等)

zsgmer的博客 2724

位运算的定义、原理及应用

因为在计算机内存中,数都是以二进制的形式储存,所以对二进制数据直接进行运算可以大大加快程序的性能和运算效率。而位运算还有很多奇妙的应用,下面我将会从位运算符的基本概念进行论述,并举例说明常见位运算符的应用。

2301_79105088的博客 2539

位运算以及位运算的应用

位运算的介绍,位运算的应用

weixin_42132854的博客 885

车辆TBOX科普 第64次 TBOX系统集成测试与文档编写

汽车电子开发中,TBOX作为核心网关面临独特挑战:需处理多网络接口、满足严苛安全标准并确保10年以上可靠性。项目文档是开发流程的核心资产,必须与编码同步更新,构建从需求到测试的完整闭环。系统集成测试需分层进行,结合硬件在环测试和自动化工具,并严格管理缺陷。文档与测试深度协同,通过追溯矩阵确保每个需求都被覆盖验证。最终交付不仅是软件包,更是一套包含完整验证报告的信任体系。这种严谨的工程纪律,是将代码转化为车规级可靠产品的关键保障。

IT深耕十余载,大道之简 1331

基于BQ24610的24V电池充电板

转自我的博客 本文的主要目的在于传播基本的阅读datasheet的能力,以及PCB设计需要注意的基本问题。 本次需要设计的是24V动力锂电池充电电路。 原理图设计 参考官方参考电路 为了快速设计电路,自然是参考官方参考电路,选择Typical Application。 做细微的参数调整 由于我们的需求是给24V的电池充电,所以需要稍微修改一下原理图,接下来需...

greedyhao的博客 1万+

java 位运算应用_java位运算应用

位移动运算符:<比如:3 <<2(3为int型)1)把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,2)把该数字高位(左側)的两个零移出。其它的数字都朝左平移2位,3)在低位(右側)的两个空位补零。则得到的终于结果是0000 0000 0000 0000 0000 0000 0000 1100,转换为十进制是12。同理,>...

weixin_42522148的博客 325

ICLR 2022)ODConv:即插即用的动态卷积 (附代码)

一定程度上讲,ODConv可以视作CondConv的延续,将CondConv中一个维度上的动态特性进行了扩展,同时了考虑了空域、输入通道、输出通道等维度上的动态性,故称之为全维度动态卷积。ODConv是一种动态卷积算法,它的原理是在卷积过程中,根据输入数据的特征动态地调整卷积核的形状和大小,以适应不同的输入数据。具体来说,ODConv通过引入一个可学习的形变模块,根据输入数据的特征动态地调整卷积核的形状和大小,从而提高了卷积神经网络的性能。此外,相比常规卷积,动态卷积的卷积核参数往往是其n倍。

PLANTTHESON的博客 2万+

【Programming Clip】位运算的应用

本文请见【Programming Clip】位运算的应用

gnuhpc的专栏 3117

uniapp - 超详细 H5 网页利用 uni.downloadFile 下载 URL 文件流并调用浏览器下载功能效果,前台通过请求后端接口获取文件并下载保存到本地(支持电脑PC与手机移动端H5)

uniapph5网页下载文件,uniapp网站下载文件流,uniapp的移动端h5实现接口url文件下载,uniapph5页面在浏览器中如何下载指定url文件流文件并保存到本地,uniapp移动端h5调用后端接口保存文件到本地,uniapph5通过下载后获得临时路径怎么让浏览器弹出下载,uniapp怎么请求接口下载到文件,得到Blob临时路径对象后如何下载到本地,浏览器怎么下载blob对象,uniapp二进制文件流下载,uniapph5中的文件流下载和指定的url下载详细教程,uniappapp移

🏆 前端领域优质创作者 1万+

【NLP】第十章:位置编码Positional Encoding

前面讲RNN时一般都会有一个ht的输出,这个输出就是样本与样本之间的信息,而且RNN是时序循环的,所以RNN本身的结构,在物理上,就自带词的前后顺序信息的。比如词never,不管never本身的词向量是什么,只要你在序列中排第一个位置,你的位置向量就是[0,1,01],你排第三个位置,你的位置向量就是[0.9,-0,4,0.2,1.0]。也所以,你可以理解为:embedding后的词嵌入,PE按照每个样本在sequence中的位置,把embedding后的词嵌入给扭转后,才送入attention的。

因为热爱所以坚持 1918

位运算在算法中的应用

什么是位运算及位运算在算法中的应用

weixin_73044854的博客 384

【软考高级架构】案例题考前突击6——大数据架构

前一类的数据主要由流量方以接口的方式提供(比如对接的腾讯广点通平台),后一类则是某网特有的数据,通过买家的浏览、下单、付款日志算出来。1. 在数据层面只维护一张包含所有指标的MySQL表,表中的stday字段作为索引,stday=当天的保存实时数据,stday<当天的保存离线数据。典型的大数据架构,除了Lambda架构之外,还有kappa架构,这两个架构的区别如下标所示,请补充表中空(1)-(4)第二,实时数据只对接了内部的kafka消息,没有实时的获取第三方的曝光、点击、浏览数据。

qq837993702的博客 67

一文详解“位运算“在算法中的应用

位运算的相关介绍、LeetCode相关刷题

我要学编程的博客 3614

uniapp 全局弹窗

功能详解1.有的组件需要全局调用,不想要在一个页面里面一个个引入,现在就需要写入到全局中,直接全局触发。2.通过 $rechargePop就能全局触发 充值的弹窗实现步骤一、先把组件封装好,如 rechargePop组件位置 components/RechargePop/index.vue ,就定义一个methods open方法就可以 二、在同级别路径下定义一个 index.js 三、引入到main.js 四、全局调用this.$rechargePop(); 就能弹出那个弹窗

weixin_42066070的博客 657

SXU—软件测试方法和技术-朱少民-第三部分 软件测试方法大题汇总-附考点和相关习题及解答

软件测试方法和技术-朱少民-第三部分 软件测试方法—-最少测试用例个数,强一般弱一般强健壮、边界值分析、ns流程图、白盒逻辑覆盖代码、等价类划分,逻辑组合(条件)覆盖,计算圈复杂度等—附考点和相关习题及解答

weixin_63597914的博客 2213

位运算的基础及常见应用

最近在看jdk源码,发现很多时候用到位运算,由于本人不是本专业的,很多位运算的内容不理解。于是上网整理位运算的一些基础知识与常用应用,以供复习、查询。   ## 位运算基础   System.out.println(3 & 6); //2->10, 位与,有0...

176

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

位运算与应用

一,位运算基础 位运算(包括与,或,取反,异或,左移,右移等)是程序设计中的一个重要的领域。尤其是安全和底层开发中,除了指针的频繁使用之外,位运算是另一个非常频繁使用的领域。 因此,在求职面试中,位运算也是每年重点考查的知识点。首先,我们有必要复习一下C语言中位运算的一些基础计算方法。   1,与运算:& 与运算的操作符为&。2个数进行与运算时,就是将这2个数的二进制进行与操作

u012713968的专栏 3484

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

位运算的一些应用

判断奇偶 1 判断二进制1的个数的奇偶性 改变二进制某些特定位的值 大部分内容选自百度百科(搜索位运算) 1. 判断奇偶奇数 & 1 == 1偶数 & 1 == 0func main() { fmt.Println(isOdd(3)) fmt.Println(isOdd(-3)) fmt.Println(isOdd(0)) fmt.Println(isOdd(4)

漂泊尘埃0x101010的专栏 678

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java位运算应用

位移动运算符: &lt;&lt;表示左移, 左移一位表示原来的值乘2. 比如:3 &lt;&lt;2(3为int型)  1)把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,  2)把该数字高位(左側)的两个零移出。其它的数字都朝左平移2位,  3)在低位(右側)的两个空位补零。则得到的终于结果是0000 0000...

weixin_34064653的博客 95
上一篇: 索引无效的几种情况
下一篇: 字符串经典hash函数
zxycode007
博客等级 码龄18年 53粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值