位运算
2016-03-17 09:24
295 查看
位操作基础篇之位操作全面总结 - MoreWindows Blog - 博客频道 - CSDN.NET http://blog.csdn.net/morewindows/article/details/7354571
总结一下:
1、判断奇偶
数i: if(i&1)printf("%d",i)
2、交换两数
数a,b: a^=b;
b^=a;
a^=b; //^运算符具有交换律
注意:a和b 相等和任一者为负数都可以!!但如果用一个数a和a则会出现错误
3、变换符号:
正数变负数,负数变正数
~a+1 //~是取反运算符
4、取绝对值
数a:
int i=a>>31;
return ((a^i)-i);
5、空间压缩
在数组指定位置上写1(相当于判断true)
int b[5]={0};
for(int i=0;i<40;i+=3)
b[i/32] |=(1<<(i%32));
判断某位上是否是1
for(int i=0;i<40;i++)
if((b[i/32] >>(i%32))&1) putchar('1');
6、高低位交换
int a;
a=(a>>8)|(a<<8);
7、二进制逆序
int a=2343;
a=((a&0xAAAA)>>1)|((a&0x5555)<<1);
a=((a&0xCCCC)>>2)|((a&0x3333)<<2);
a=((a&0xF0F0)>>4)|((a&0x0F0F)<<4);
a=((a&0xFF00)>>8)|((a&0x00FF)<<8);
8、二进制中1的个数
int a=243;
a=((a&0xAAAA)>>1)+(a&0x5555);
a=((a&0xCCCC)>>2)+(a&0x3333);
a=((a&0xF0F0)>>4)+(a&0x0F0F);
a=((a&0xFF00)>>8)+(a&0x00FF);
还有一种做法:int i=0;
while(n)
{ ++i; n=(n-1)&n;} // i 就是n 的1 的个数
9、缺失的数字
int a[7]={1,2,3,4,3,4,2};
int lost=0;
for(int i=0;i<lost;i++)
lost^=a[i];
总结一下:
1、判断奇偶
数i: if(i&1)printf("%d",i)
2、交换两数
数a,b: a^=b;
b^=a;
a^=b; //^运算符具有交换律
注意:a和b 相等和任一者为负数都可以!!但如果用一个数a和a则会出现错误
3、变换符号:
正数变负数,负数变正数
~a+1 //~是取反运算符
4、取绝对值
数a:
int i=a>>31;
return ((a^i)-i);
5、空间压缩
在数组指定位置上写1(相当于判断true)
int b[5]={0};
for(int i=0;i<40;i+=3)
b[i/32] |=(1<<(i%32));
判断某位上是否是1
for(int i=0;i<40;i++)
if((b[i/32] >>(i%32))&1) putchar('1');
6、高低位交换
int a;
a=(a>>8)|(a<<8);
7、二进制逆序
int a=2343;
a=((a&0xAAAA)>>1)|((a&0x5555)<<1);
a=((a&0xCCCC)>>2)|((a&0x3333)<<2);
a=((a&0xF0F0)>>4)|((a&0x0F0F)<<4);
a=((a&0xFF00)>>8)|((a&0x00FF)<<8);
8、二进制中1的个数
int a=243;
a=((a&0xAAAA)>>1)+(a&0x5555);
a=((a&0xCCCC)>>2)+(a&0x3333);
a=((a&0xF0F0)>>4)+(a&0x0F0F);
a=((a&0xFF00)>>8)+(a&0x00FF);
还有一种做法:int i=0;
while(n)
{ ++i; n=(n-1)&n;} // i 就是n 的1 的个数
9、缺失的数字
int a[7]={1,2,3,4,3,4,2};
int lost=0;
for(int i=0;i<lost;i++)
lost^=a[i];
相关文章推荐
- MySQL 源码安装
- linux内存cached释放
- 第三周项目三输出三角
- Struts2中 Result类型配置详解
- gitlab 版本控制系统 github的开源实现
- JVM性能优化入门指南
- 使用Tcl脚本分配FPGA管脚
- .Net Core CLI windows安装
- Qt打印调试信息输出到android logcat中
- Fullpage.js固定导航栏-实现定位导航栏
- 蓝牙协议规范(射频、基带链路控制、链路管理)
- [Songqw.Net 基础]WPF插件化中同步Style
- 编程小练习10
- 深入浅出--iOS的TCP/IP协议族剖析&&Socket
- linux】利用logger,logrotate处理脚本日志
- Struts2-result类型
- java 为什么序列化?为什么不是所有的类序列化?
- 单例模式和多例模式的区别(转)
- 几种内存溢出的类型及解决思路
- JAVA Scanner类