本文以实例形式对C++位操作的常见用法进行了总结。分享给大家供大家参考之用。具体方法如下:

在C++中位操作有6种基本操作符,按照优先级分别是:
取反 ~
移位 << >>
与 &
异或 ^
或 |
常用的用法有:
1 判断偶数,判断最低位是0还是1即可,比求模快
x % 2 != 0 //x正负都可以判断;不用x%2 == 1,因为如果x为负奇数,x%2=-1
x & 0x1 == 0
2 交换两个数,不用中间变量
void mySwap(int &a, int &b)
{
if(a == b) //相等时也能得到正确结果,但是没必要了
return;
a ^= b;
b ^= a;
a ^= b;
}
3 求整数的二进制表示中1的个数,不用一个一个的移位判断
int numOfBit1(int a)
{
int cnt = 0;
while(a != 0)
{
++cnt;
a &= a - 1; //将最右边的1置为0;正负都可计算,负数是按照补码计算的,最后的符号位也被统计
}
return cnt;
}
4 正负转换,不使用正负号。不管正数负数,取反后加1即可
int a = 1;
a = ~a + 1; //a变成-1
a = ~a + 1; //a又变成1
5 求绝对值,不判断正数负数,不使用正负号,返回绝对值
int myAbs(int a)
{
int sign = a >> 31; //如果a为正数,sign为0;否则sign为-1,即0xFFFFFFFF
return (a^sign) - sign; //(a^0)-0 = a, (a^-1)-(-1) = ~a+1 = -a ,a^-1即为a取反
}
希望本文所述对大家C++程序设计的的学习有所帮助。
相关推荐:
读大数据量的XML文件的读取问题
Ajax 核心框架函数及例子
PHP教程 基本语法
在IE下获取object(ActiveX)的Param的代码
js apply/call/caller/callee/bind使用方法与区别分析
javaScript 简单验证代码(用户名,密码,邮箱)
Oracle 子程序参数模式,IN,OUT,NOCOPY
返回SQL执行时间的存储过程
IIS SHTML支持设置方法(SSI)
Flex 实现可以拖动的毛玻璃效果
javascript 变速加数功能实现代码
Js文字背景行如流水特效
javascript 操作Word和Excel的实现代码
extjs DataReader、JsonReader、XmlReader的构造方法
从Web查询数据库之PHP与MySQL篇
AJAX 客户端响应速度提高分析
json 入门基础教程 推荐
SQL 多表连接查询实现语句
php self,$this,const,static,-&gt;的使用
javascript showModalDialog传值与FireFox的window.open 父子窗口传值示例第1/2页
PHP 数组教程 定义数组
Javascript isArray 数组类型检测函数
eWebEditor 上传文件提示格式不正确的解决方法
模仿JQuery sortable效果 代码有错但值得看看
jquery (show,fadeOut,Animate)简单效果
javascript的onchange事件与jQuery的change()方法比较
ie与firefox下的event使用说明与详细区别
解决表单中第一个非隐藏的元素获得焦点的一个方案
jQuery 使用手册(四)
JS 文件本身编码转换 图文教程
AJAX 自学练习 请求与显示
PHP 字符截取 解决中文的截取问题,不用mb系列
判断一个表的数据不在另一个表中最优秀方法
asp.net(c#)获取内容第一张图片地址的函数
页面版文本框智能提示JS代码
jQuery toggle()设置CSS样式
写入cookie的JavaScript代码库 cookieLibrary.js
跨域表单提交状态的变相判断代码
Serv-U 无法连接到服务器127.0.0.1,端口43958 之解决办法
JavaScript 对话框和状态栏使用说明
Jquery中增加参数与Json转换代码
javascript 走马灯效果的链接提示
asp.net *.ashx类型的文件使用说明
windows与linux 路径正则写法
写出更好的JavaScript之undefined篇(上)
中文用户名的js检验正则
javascript GUID生成器实现代码
SQL货币数字转英文字符语句
javascript获得CheckBoxList选中的数量
jQuery live( type, fn ) 委派事件实现