- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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-1x+y = x - ~y - 1 = (x|y)+(xy)?x-y = x + ~y + 1 = (x|~y)-(~xy)?x^y = (x|y)-(xy)x|y = (x~y)+yxy = (~x|y)-~xx==y:??? ~(x-y|y-x)x!=y:??? x-y|y-xx 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 0int sign(int x){??? return (x31) | (unsigned(-x))31 ;//x=-2^31时失败(^为幂)}三值比较:cmp(x,y) = -1, xy; 0, x==y; 1, x yint cmp( int x, int y ){??? return (xy)-(x-y) ;}doz=x-y, x=y; 0, xyint 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)k)2.(((unsigned)x)k)k上舍入:1. t = (1k)-1 ; x = (x+t)~t ;2.t = (-1)k ; x = (x-t-1)t ;位计数,统计1位的数量:1.int pop(unsigned x){??? x = x-((x1)0 ;??? x = (x0 + ((x2) 0) ;??? x = (x+(x4)) 0x0f0f0f0f ;??? x = x + (x8) ;??? x = x + (x16) ;??? return x 0x0000003f ;}2.int pop(unsigned x) {??? static char table[256] = { 0,1,1,2, 1,2,2,3, ...., 6,7,7,8 } ;??? return table[x0xff]+table[(x8)0xff]+table[(x16)0xff]+table[(x24)] ;}奇偶性计算:x = x ^ ( x1 ) ;x = x ^ ( x2 ) ;x = x ^ ( x4 ) ;x = x ^ ( x8 ) ;x = x ^ ( x16 ) ;结果中位于x最低位,对无符号x,结果的第i位是原数第i位到最左侧位的奇偶性位反转:unsigned rev(unsigned x){??? x = (x 0 1 | (x1) 0;??? x = (x 0 2 | (x2) 0;??? x = (x 0x0f0f0f0f) 4 | (x4) 0x0f0f0f0f ;??? x = (x24) | ((x0xff00)8) | ((x8) 0xff00) | (x24) ;??? return x ;}递增位反转后的数:unsigned inc_r(unsigned x){??? unsigned m = 0;??? x ^= m ;??? if(
文档评论(0)