C++位操作与、或、非、异或、取反详解
一、按位逻辑运算符
1,按位取反~
如:~(10)结果位(01)
~var不会改变var的值,如果要改var值,可以为var=~var;
2,按位与&
有0得0,全1出1
var&=300等价于var=var&300
3,按位或|
有1出1,全0出0
var|=300等价于var=var|300
4,按位异或^
两者相等为0,不等为1
二、位逻辑运算符运用
1,用法:掩码(&)
按位与运算符常用于掩码(mask),可以获取某个位的状态
2,用法:打开位(设置位) (|)
有时必须打开其中某一位,其它位不变,这种情况可以采用按位或运算符
原理:因为使用|运算符,任何与0组合,结果都为本身;任何与1组合,结果都为1
例如:想把0xFE第0位置为1
则:0xFE|1=0xFF
3,用法:关闭位(清空位)(&、~)
有时必须关闭其中某一位,其它位不变,这种情况可以采用按位取反再与
原理:flags=flags&~Mask,Mask只要第一号位为1,其它都为0,所以,~Mask除1号为0,其它都为1
4,用法:切换位(^)
切换位是指改变原来的状态,开变为关,关变为开
原理:假设b为一个位,若b==1,则b^1=0;若b==0,则b^1=1
另外,无论b为0或者1,0^b均为b
所以,flags=flags^Mask; Mask位为1的切换,位为0的不变
5,用法:检查位
if((flags&Mask)==Mask)
{
TRACE(L"n位为1");
}
由于按位运算符的优先级比==低,所以必须加括号
为了避免信息漏过边界,掩码至少要与其覆盖的值宽度相同。
三、移位运算符
1,左移<<
(10001010)<<2//表达式
(00101000) //结果值
假设value为1,那么value<<2为4,但是value本身不变,仍为1
使用<<=来更改变量的值
value<<=2;//把value值改为4
2,右移>>
有符号类型右移结果取决于机器,这里以无符号为例子
(10001010)>>2//表达式
(00100010) //结果值
value>>=3;//右移后的结果赋值给value
3,移位运算符
number<<n; //number乘以2的n次幂
number>>n; //如果number为非负,则用number除以2的n次幂
这些移位运算符类似于十进制中移动小数点来乘以或除以10
运用:
#define BYTE_MASK 0xFF
unsigned long color = 0x002a162f;
unsigned char blue, green, red;
red = color&BYTE_MASK;
green = (color >> 8)&BYTE_MASK;
blue = (color >> 16)&BYTE_MASK;
概念:位字段?
C++位操作与、或、非、异或、取反详解相关推荐
- 单片机c语言或运算,单片机avr c语言位运算 与或非 异或逻辑 运算介绍 详解
位运算是指按二进制位进行的运算.在单片机中位运算通常用于I/O端口的输入输出控制和逻辑判断. C语言提供的位运算符有: 运算符 含义 功能 & 按位与 如果两个相应的二进制位都为1,则该位的结 ...
- JVM堆内存与非堆内存(heap)官方详解
JVM堆内存与非堆内存(heap)官方详解 JAVA堆内存管理是影响性能主要因素之一. 堆内存溢出是JAVA项目非常常见的故障,在解决该问题之前,必须先了解下JAVA堆内存是怎么工作的. 先看下JAV ...
- python20191031_20191031:Python取反运算详解
20191031:Python取反运算详解 取反运算:~3 == 4 1.对于数字 3 =======>转换为二进制表示为011 2.对011取反为100 3.为什么表示-4 a.计算机用补码表 ...
- python爬虫beautifulsoup爬当当网_Python爬虫包 BeautifulSoup 递归抓取实例详解_python_脚本之家...
Python爬虫包 BeautifulSoup 递归抓取实例详解 概要: 爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到 ...
- java静态变量重复new_Java非静态成员变量之死循环(详解)
1.非静态成员变量 当成员变量为非静态成员变量且对当前类进行实例化时,将会产生死循环 例子: public class ConstructorCls { private ConstructorCls ...
- win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解)
这篇文章主要介绍了win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解),详细的介绍了Oracle 11g 安装的步骤,有兴趣的可以了解一下. 先去网上把下面列表里的文件下 ...
- html标签非成对,深入document.write()与HTML4.01的非成对标签的详解
深入document.write()与HTML4.01的非成对标签的详解 (一)HTML4.01中的非成对标签: 注释标签: 严格来讲不算HTML标签的:文档声明标签 设置页面元信息的:标签 设置网页 ...
- Python爬虫包 BeautifulSoup 递归抓取实例详解
Python爬虫包 BeautifulSoup 递归抓取实例详解 概要: 爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到另 ...
- Python 关于浮点数取整详解
Python 关于浮点数取整详解 文章目录 Python 关于浮点数取整详解 一.四舍五入 二.向下取整 三.向上取整 四.截取整数和小数部分 五.扩展:浮点数精度问题 相关博客
最新文章
- K-Means聚类算法进行压缩图片
- CentOS Linux解决Device eth0 does not seem to be present及设置固定ip
- mac 卸载 eclipse_Mac 新手准备工具集合
- 算法(18)-leetcode-剑指offer2
- sdut 数据结构实验之排序三:bucket sort
- 理解卷积神经网络的利器:9篇重要的深度学习论文(下)
- 马斯克谈买比特币:当法币实际利率为负时 只有“傻子”才不放眼他处
- 单源最短路径——Dijkstra代码实现
- BIND9源码分析奠基
- html中http502怎么解决,Http Error 502 解决方法
- 模指数运算之python实现
- L2-016 愿天下有情人都是失散多年的兄妹
- 企业局域网即时通讯软件存在是必然趋势
- Image Retrieval using Scene Graphs ——基于场景图的图像检索 读书笔记
- 电脑重装系统简单小白教程
- windwos操作系统有snmp服务器,windows服务器snmp v3
- JavaScript-84:利用函数求任意两个数的和
- Ubuntu开启wifi热点
- VMWare虚拟机找不到eht0解决办法
- 超级计算器 - 网易出品的数学好助手
热门文章
- js把string转化为json
- cv2.contourArea函数详解
- Canvas入门篇(一)
- PB级大规模Elasticsearch集群运维与调优实践
- Matlab代码 多时间尺度优化调度 MATLAB程序含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度
- java 阿里云接口实现发送短信验证码
- matlab模糊自适应pid控制仿真程序,模糊自适应整定PID控制matlab仿真程序(刘金锟-先进PID控制及其MATLAB仿真)...
- cube escape语言设置_Cube Escape Harvey's Box攻略
- 我眼里的奇酷手机360OS
- CS61A Lab 11