位运算

发布时间:2016-12-10 13:21:24 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"位运算",主要涉及到位运算方面的内容,对于位运算感兴趣的同学可以参考一下。

//位操作 //1 二进制逆序 高低位交换 void ReverseBinary() { char a='B'; a=(a>>1&0x55)|(a<<1&0xAA); a=(a>>2&0x33)|(a<<2&0xCC); a=(a>>4&0x0F)|(a<<4&0xF0); cout<<int(a)<<endl; } //缺失数字 //缺少一个 void LostNumber(int a[],int N) { int num=0; for(int i=0;i<N;i++) { num^=a[i]; } cout<<num<<endl; } int LowBits(int a) { return a&(~(a-1)); } //缺失两个 void LostNumber_2(int a[],int N) { int num1=0; int num2=0; int s=0; for(int i=0;i<N;i++) s^=a[i]; int k=LowBits(s); for(int i=0;i<N;i++) { if(a[i]&k) num1^=a[i]; else num2^=a[i]; } cout<<num1<<endl; cout<<num2<<endl; } //缺失三个数字 void LostNumber_3(int a[],int N) { int num=0; int s=0; for(int i=0;i<N;i++) s^=a[i]; int t=LowBits(s); for(int i=0;i<N;i++) { if(t&a[i]) { num^=a[i]; } } cout<<num<<endl; } //不用加减乘除做加法 int Add(int a,int b) { if(b==0) return a; int t=a; a=a^b; b=((t&b)<<1); return Add(a,b); } void JudgeEight(int a) { cout<<(a+(8-1)&(~(8-1)))<<endl; } //最大公约数问题 F(x,y)=F(y,x%y) int GCD(int x,int y) { if(y==0) return x; if(x<y) swap(x,y); return GCD(y,x%y); } //最大公约数 F(x,y)=F(y,x-y) int GCD1(int x,int y) { if(y==0) return x; if(x<y) swap(x,y); return GCD(x-y,y); } //最大公约数 最后改进 F(x,y) {2*F(x,y);x和y都是偶数; x是偶数,y是奇数F(x>>1,y);x是奇数,y是偶数F(x,y>>1);都是奇数F(x-y,y)} int F(int x,int y) { if(x<y) swap(x,y); if(y==0) return x; if((!(x&0x1))&&(!(y&0x1))) {//都是偶数 return 2*F(x>>1,y>>1); } else if((!(x&0x1))&&(y&0x1)) return F(x>>1,y); else if((x&0x1)&&(!(y&0x1))) return F(x,y>>1); else return F(x-y,y); }

上一篇:Linux设备模型(总线、设备、驱动程序和类)
下一篇:多线程的个人总结

相关文章

关键词: 位运算

相关评论