位的经典操作(数据结构).doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
位的经典操作(数据结构)

位的经典操作 检测一个无符号数是不为2^n-1(^为幂): x(x+1) 将最右侧0位改为1位: x | (x+1) 二进制补码运算公式: -x = ~x + 1 = ~(x-1) ~x = -x-1 -(~x) = x+1 ~(-x) = x-1 x+y = x - ~y - 1 = (x|y)+(xy) x-y = x + ~y + 1 = (x~y)-(~xy) x^y = (x|y)-(xy) x|y = (x~y)+y xy = (~x|y)-~x x==y: ~(x-y|y-x) x!=y: x-y|y-x x y: (x-y)^((x^y)((x-y)^x)) x=y: (x|~y)((x^y)|~(y-x)) x y: (~xy)|((~x|y)(x-y)) //无符号x,y比较 x=y: (~x|y)((x^y)|~(y-x)) //无符号x,y比较 使用位运算的无分支代码: 计算绝对值 int abs( int x ) { int y ; y = x 31 ; return (x^y)-y ;//or: (x+y)^y } 符号函数:sign(x) = -1, x0; 0, x == 0 ; 1, x 0 int sign(int x) { return (x31) | (unsigned(-x))31 ;//x=-2^31时失败(^为幂) } 三值比较:cmp(x,y) = -1, x y int cmp( int x, int y ) { return (xy)-(x-y) ; } doz=x-y, x=y; 0, xy/y int doz(int x, int y ) { int d ; d = x-y ; return d ((~(d^((x^y)(d^x))))31) ; } int max(int x, int y ) { int m ; m = (x-y)31 ; return y m | x ~m ; } 不使用第三方交换 x,y: 1. x ^= y ; y ^= x ; x ^= y ; 2. x = x+y ; y = x-y ; x = x-y ; 3. x = x-y ; y = y+x ; x = y-x ; 4. x = y-x ; x = y-x ; x = x+y ; 双值交换:x = a, x==b; b, x==a//常规编码为x = x==a ? b :a ; 1. x = a+b-x ; 2. x = a^b^x ; 下舍入到2的k次方的倍数: 1. x ((-1) 2.(((unsigned)x)k)k/k 上舍入: 1. t = (1 2.t = (-1)k x=(x-t-1)amp;amp;t/k 位计数,统计1位的数量: 1. int pop(unsigned x) { x = x-((x1)0 ; x = (x0 + ((x2) 0) ; x = (x+(x4)) 0xst1:chmetcnv w:st=on tcsc=0 unitname=F sourcevalue=0 numbertype=1 negative=False hasspace=False0f/st1:chmetcnvst1:chmetcnv w:st=on tcsc=0 unitname=F sourcevalue=0 numbertype=1 negative=False hasspace=False0f/st1:chmetcnvst1:chmetcnv w:st=on tcsc=0 unitname=F sourcevalue=0 numbertype=1 negative=False hasspace=False0f/st1:chmetcnvst1:chmetcnv w:st=on tcsc=0 unitname=F sourcevalue=0 numbertype=1 negative=False hasspace=False0f/st1:chmetcnv ; x = x + (x8) ; x = x + (x16) ; return x 0xst1:chmetcnv w:st=on tcsc=0 unitname=F sourcevalue=3 numbertype=1 negative=False hasspace=False0000003f/st1:chmetcnv ; } 2. int pop(unsigned x) { static char table[256] = {

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档