按位与运算符(&)

参加运算的两个数据,按二进制位进行“与”运算。

运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;

即:两位同时为“1”,结果才为“1”,否则为0

例如:3&5  即 0000 0011 & 0000 0101 = 0000 0001   因此,3&5的值得1。

另,负数按补码形式参加按位与运算。

“与运算”的特殊用途:

(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。

(2)取一个数中指定位

方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。

例:设X=10101110,

取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;

还可用来取X的2、4、6位。

按位或运算符(|)

参加运算的两个对象,按二进制位进行“或”运算。

运算规则:0|0=0;   0|1=1;   1|0=1;    1|1=1;

即 :参加运算的两个对象只要有一个为1,其值为1。

例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111   因此,3|5的值得7。 

另,负数按补码形式参加按位或运算。

“或运算”特殊作用:

(1)常用来对一个数据的某些位置1。

方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。

例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。

异或运算符(^)

参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0;   0^1=1;   1^0=1;   1^1=0;

即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

“异或运算”的特殊作用:

(1)使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。

例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。

(2)与0相异或,保留原值 ,X ^ 0000 0000 = 1010 1110。

从上面的例题可以清楚的看到这一点。

取反运算符(~)

参加运算的一个数据,按二进制位进行“取反”运算。

运算规则:~1=0;   ~0=1;

即:对一个二进制数按位取反,即将0变1,1变0。

使一个数的最低位为零,可以表示为:a&~1。

~1的值为1111111111111110,再按“与”运算,最低位一定为0。因为“~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。

左移运算符(<<)

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

例:a = a << 2 将a的二进制位左移2位,右补0,

左移1位后a = a * 2;

若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

右移运算符(>>)

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

操作数每右移一位,相当于该数除以2。

例如:a = a >> 2 将a的二进制位右移2位,

左补0 or 补1 得看被移数是正还是负。

>> 运算符把 expression1 的所有位向右移 expression2 指定的位数。expression1 的符号位被用来填充右移后左边空出来的位。向右移出的位被丢弃。

例如,下面的代码被求值后,temp 的值是 -4:

-14 (即二进制的 11110010)右移两位等于 -4 (即二进制的 11111100)。

var temp = -14 >> 2

无符号右移运算符(>>>)

>>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。

例如:var temp = -14 >>> 2

变量 temp 的值 -14 (即二进制的 11111111 11111111 11111111 11110010),向右移两位后等于 1073741820 (即二进制的 00111111 11111111 11111111 11111100)。

复合赋值运算符

位运算符与赋值运算符结合,组成新的复合赋值运算符,它们是:

&=    例:a &= b        相当于a=a & b

|=    例:a |= b        相当于a=a | b

>>=   例:a >>= b       相当于a=a >> b

<<= 例:a <<= b       相当于a=a << b

^=   例:a ^= b       相当于a=a ^ b

运算规则:和前面讲的复合赋值运算符的运算规则相似。

不同长度的数据进行位运算

如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算

以“与”运算为例说明如下:我们知道在C语言中long型占4个字节,int型占2个字节,如果一个long型数据与一个int型数据进行“与”运算,右端对齐后,左边不足的位依下面三种情况补足,

(1)如果整型数据为正数,左边补16个0。

(2)如果整型数据为负数,左边补16个1。

(3)如果整形数据为无符号数,左边也补16个0。

如:long a=123;int b=1;计算a & b。

如:long a=123;int b=-1;计算a & b。

如:long a=123;unsigned int b=1;计算a & b。

另外,补充一个运算符优先级:

C++ 按位与、或、异或等运算方法相关推荐

  1. 按位与、或、异或等运算方法

    1.按位与运算符(&) 参加运算的两个对象,按二进制位进行"与"运算 运算规则: 0 & 0 = 0;0 & 1 = 0;1 & 0 = 0;1 & ...

  2. java 同或_按位与、或、异或等运算方法

    按位与运算符(&)参加运算的两个数据,按二进制位进行"与"运算.运算规则:0&0=0;  0&1=网络 按位与运算符(&) 参加运算的两个数据,按二 ...

  3. 位运算总结(按位与,或,异或)

    按位与运算符(&) 参加运算的两个数据,按二进制位进行"与"运算. 运算规则:0&0=0;  0&1=0;   1&0=0;    1&1= ...

  4. 按位与和异或运算符(Python中两个不常用,却重要的运算符)

    Python中两个不常用,却重要的运算符 按位与 和 异或 运算符 **&按位与运算符:**转化为二进制,每一位分别进行运算,每一位相同为1,不同为0 **^异或运算符:**0和任何数都是变成 ...

  5. 按位与、或等运算方法

    下面总结一下各种c++中出现的各种位运算的方法! 1 按位与运算符(&) 参加运算的两个数据,按二进制位进行"与"运算. 运算规则:0&0=0;   0&1 ...

  6. 异或(XOR)运算加密/解密在线工具

    异或(XOR)运算加密/解密在线工具,工具链接:http://www.atoolbox.net/Tool.php?Id=857 异或(XOR)运算加密一种简单高效.非常安全的加密方法. 异或(XOR) ...

  7. 异或(XOR)运算加密/解密算法

    本文将介绍一个简单易用的加密/解密算法:使用异或(XOR)运算.本算法原理简单,旨在使读者对信息的加密/解密有一个更加直观的印象. XOR算法原理 从加密的主要方法看,换位法过于简单,特别是对于数据量 ...

  8. 【与】、【或】、【异或】运算

    与.或.异或运算 [与]运算 符号:"&" 定义:参加运算的两个数据,按二进制位进行'"与"运算. 规则:两位同时为"1",结果为& ...

  9. C语言---异或位运算(^)

    异或位运算: ^ int a = 0, b = 1, c;c = a ^ a; // c = 0 // 相当于二进制 1+1=0, 0+0=0c = a ^ a ^ b; // c = b // 1+ ...

最新文章

  1. 如何将github上源代码导入eclipse中
  2. monkeyrunner无法运行的问题解决方案总结
  3. 无风扇网站服务器,这款服务器采用无风扇设计
  4. DataFrame表样式设置(二)
  5. xib cell用法
  6. config userc.php,框架内置Config.php配置
  7. php将中文编译成字符串,PHP将汉字字符串转换为数组
  8. 天勤数据结构代码——树基本操作
  9. python操作pdf加密解密
  10. 电脑正常但windows安全中心有个黄色感叹号?
  11. 程序猿12个“人艰不拆”的真相
  12. 2016年上半年光伏企业沉浮录
  13. 数据挖掘之OneR算法(原来数据挖掘如此简单!)
  14. Unity Shader学习-高光反射
  15. 读完 Effective Java,我整理了 59 条技巧!(含pdf)
  16. 练习题|文件操作和函数
  17. linux下文件结构收藏
  18. Python爬虫随笔:爬取iciba上的单词发音文件
  19. 风光储交直流微电网matlab/simulink仿真模型仿真模型
  20. 曾任5家上市企业大学校长李乾老师

热门文章

  1. mitmproxy系列抓包工具使用与实战
  2. Linux下Netfilter创建自己的Hook,让数据包可以发送到用户层,然后统计节点负载信息
  3. task_struct结构
  4. ps拾取颜色设置文字颜色
  5. ps虚拟服务器,电脑ps模拟器的安装方法
  6. surface pro 4 发热抖屏的解决方法
  7. 《当阿呆遇上阿瓜》:当铁锹遇上石头
  8. 2.3.1-4. IEEE 754 标准
  9. 银监会出贷后管理新规 防资金空转
  10. Javascript中公有成员,私有成员,静态成员