- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序中所有的数据在计算机内存中都是以二进制的形式储存的。位运算,本质上就是直接对整数在内存中的二进制位进行运算,同时,数的各个二进制位互不影响。由于位运算直接对内存数据进行操作,不需要转换成十进制,因此处理速度非常快,在信息学竞赛中往往可以优化理论时间复杂度的系数。另外,位运算还有很多特殊的技巧,能够帮助我们简化代码、美化程序等等。本文就结合自己的学习和应用经验,介绍一些位运算及其对程序的优化方法。 X Y X and Y X or Y X xor Y not X 0 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 位运算主要有and ,or,xor,not,shl,shr我们不妨通过一下的真值表来了解它们的运算法则—— Shl:左移,就是把二进制数整体向左移动x个位, 右边x位补成0 Shr:右移,就是把二进制数整体向右移动x个位, 原来高位的x个变成0,相当于div 2。 由上面的介绍,我们不难发现这些位运算的基本用途: and主要是用来取出某一个二进制位 or主要是用来强行给二进制的某一位赋值 xor运算通常用来取反 not操作就是直接把内存中的0和1全部取反 not and , shl ,shr or,xor 比如以下几个运算,你能很快报出结果吗? not 1 or 1 = not 1 and 1 = 1 and 1 shl 1 = not 1 or 0 shl 1 xor 0 and 1 = -1 0 2 -2 例1、一个文件中有9亿个不重复的9位整数,现在要求对这个文件进行排序(当然时间可以不止1秒,但要求出可行解,即在可以接受的时间和空间范围内)。 4出现了 14没有出现 mod版本:for i:=1 to time do x:=y mod base; and 版本:for i:=1 to time do x:=y and (1 shl 20-1); times mod and0.22s 0.14s 100000000 1.26s 0.52s 1000000000 12.00s 4.23s 运算要求 用位运算实现 实际应用 把右数第k位强行赋为1 x or (1 shl (k-1)) 通过这些操作,我们可以用01表示某个状态并且方便地改变这一状态,在哈希表、状态DP、一些有哪些信誉好的足球投注网站记录状态中很实用 把右数第k位强行赋为0 x and not(1 shl (k-1)) 右数第k位取反 x xor (1 shl (k-1)) 去掉右起第一个1的左边 x and (x xor (x-1)) 树状数组中用到的低位技术 求x和y的平均值下取整 x and y+(x xor y) shr 1 避免x+y超界但结果不超界的情况 求x的相反数(x基类型为有符整型) not x+1 更好地理解not以及数在计算机中的存储方式 交换变量x和变量y的值 x:=x xor y; y:=x xor y; x:=x xor y; 省去交换变量时候需要的临时变量 用位运算取绝对值(以32位整数为例) x xor (not (x shr 31) + 1) + x shr 31 循环队列比较方便的实现可以用一个头指针head,一个尾指针tail,每次取出来的是head mod base。这里不妨把base设置为2的整数次幂-1,然后用and来取模。 低位技术(Lowbit) L[i]:= i and (i xor (i-1))。 功能 用位运算实现 集合的并、交、差 A or B A and B A and not B 添加/删除某一个元素 A or 1 shl (k-1) ; A and not(1 shl (k-1)) 判断某一元素是否存在 A and (1 shl (k-1)) 是否为0。 为0就是不存在 从A集合中删去B集合 (B集合为A集合的子集) A xor B 例2. 尼克在一家养猪场工作,这家养猪场共有M间锁起来的猪舍,由于猪舍的钥匙都给了客户,所以尼克没有办法打开这些猪舍,客户们从早上开始一个接一个来购买生猪,他们到达后首先用手中的钥匙打开他所能打开的全部猪舍,然后从中选取他要买的生猪,尼克可以在此期间将打开的猪舍中的猪调整到其它开着的猪舍中,每个猪舍能存放的猪的数量是没有任何限制的。买完猪后客户会将他打开的猪舍关上。 好在尼克事先知道每位客户手中有哪些钥匙,要买多少猪,以及客户到来的先后次序。请你写一个程序,帮助尼克求出最多能卖出多少头生猪。 猪舍 客户 s t 这里用整数来表示猪舍的有无情况,这样最大可以有1000个二进制位,于是还要
您可能关注的文档
- 伺服系统第22章数控技术加工控制原理.ppt
- 但丁《神曲》介绍.doc
- 但是用平时的方法做了以后,没拿到几分还有些综合题自.ppt
- 位移习题.doc
- 伺服驱动系统的连接与调试.ppt
- 第四章 距离测量与直线定向..ppt
- 第四章SIEMENS数控系统..ppt
- 第四章_管道的屈曲分析..ppt
- 位置与坐标全章教案.doc
- 位置与布局.ppt
- 2023年江苏省镇江市润州区中考生物二模试卷+答案解析.pdf
- 2023年江苏省徐州市邳州市运河中学中考生物二模试卷+答案解析.pdf
- 2023年江苏省苏州市吴中区中考冲刺数学模拟预测卷+答案解析.pdf
- 2023年江苏省南通市崇川区田家炳中学中考数学四模试卷+答案解析.pdf
- 2023年江西省吉安市中考物理模拟试卷(一)+答案解析.pdf
- 2023年江苏省泰州市海陵区九年级(下)中考三模数学试卷+答案解析.pdf
- 2023年江苏省苏州市高新二中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市九年级数学中考复习模拟卷+答案解析.pdf
- 2023年江苏省南通市海安市九年级数学模拟卷+答案解析.pdf
- 2023年江苏省泰州市靖江外国语学校中考数学一调试卷+答案解析.pdf
最近下载
- 市政道路开口施工方案样本.pdf
- 2024年社区工作者考试必背1000题题库附参考答案【模拟题】.docx VIP
- 教师竞选高级职称评选述职报告PPT.pptx VIP
- 海康磁盘阵列产品操作及说明书.pdf
- 安徽林海园林绿化股份有限公司招聘简章.doc
- 2024年小学一年级上学期语文期中考试试卷附答案(实用) .pdf VIP
- 2024年春江苏开放大学网络学习工具及应用第二次形考作业答案.docx
- 华东师大版八年级数学下册导学案.pdf
- 九年级英语Unit 4 I used to be afraid of the dark优秀教案.doc
- 深入探讨小学思政课课程改革创新txt.docx VIP
文档评论(0)