与运算:&
两者都为1为1,否则为0

1&1=1,  1&0=0,  0&1=0,  0&0=0

或运算:|
两者都为0为0,否则为1
1|1 = 1,  1|0 = 1,  0|1 = 1, 0|0 = 0

非运算:~
1取0,0取1
~1 = 0, ~0 = 1
~(10001) = 01110

异或运算
两者相等为0,不等为1
1^1=0, 1^0=1, 0^1=1, 0^0=0

下面是详细的解释:

位运算

位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。

位运算符有:

&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。
    其中,按位取反运算符是单目运算符,其余均为双目运算符。
    位运算符的优先级从高到低,依次为~、&、^、|,
    其中~的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符。

(1)按位与运算符(&)

按位与运算将两个运算分量的对应位按位遵照以下规则进行计算:
     0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1。
即同为 1 的位,结果为 1,否则结果为 0。
    例如,设3的内部表示为
     00000011
    5的内部表示为
     00000101
    则3&5的结果为
     00000001
    按位与运算有两种典型用法,一是取一个位串信息的某几位,如以下代码截取x的最低7位:x & 0177。二是让某变量保留某几位,其余位置0,如以下代码让x只保留最低6位:x = x & 077。以上用法都先要设计好一个常数,该常数只有需要的位是1,不需要的位是0。用它与指定的位串信息按位与。

(2)按位或运算符(|)

按位或运算将两个运算分量的对应位按位遵照以下规则进行计算:
     0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1
即只要有1个是1的位,结果为1,否则为0。
    例如,023 | 035 结果为037。
    按位或运算的典型用法是将一个位串信息的某几位置成1。如将要获得最右4为1,其他位与变量j的其他位相同,可用逻辑或运算017|j。若要把这结果赋给变量j,可写成:
     j = 017|j

(3)按位异或运算符(^)

按位异或运算将两个运算分量的对应位按位遵照以下规则进行计算:
     0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0
即相应位的值相同的,结果为 0,不相同的结果为 1。
    例如,013^035结果为026。
    异或运算的意思是求两个运算分量相应位值是否相异,相异的为1,相同的为0。按位异或运算的典型用法是求一个位串信息的某几位信息的反。如欲求整型变量j的最右4位信息的反,用逻辑异或运算017^j,就能求得j最右4位的信息的反,即原来为1的位,结果是0,原来为0的位,结果是1。

(4)按位取反运算符(~)

按位取反运算是单目运算,用来求一个位串信息按位的反,即哪些为0的位,结果是1,而哪些为1的位,结果是0。例如, ~7的结果为0xfff8。

取反运算常用来生成与系统实现无关的常数。如要将变量x最低6位置成0,其余位不变,可用代码x = x & ~077实现。以上代码与整数x用2个字节还是用4个字节实现无关。

当两个长度不同的数据进行位运算时(例如long型数据与int型数据),将两个运算分量的右端对齐进行位运算。如果短的数为正数,高位用0补满;如果短的数为负数,高位用1补满。如果短的为无符号整数,则高位总是用0补满。

位运算用来对位串信息进行运算,得到位串信息结果。如以下代码能取下整型变量k的位串信息的最右边为1的信息位:((k-1)^k) & k。

移位运算

移位运算用来将整型或字符型数据作为二进位信息串作整体移动。有两个运算符:
     << (左移) 和 >> (右移)
移位运算是双目运算,有两个运算分量,左分量为移位数据对象,右分量的值为移位位数。移位运算将左运算分量视作由二进位组成的位串信息,对其作向左或向右移位,得到新的位串信息。
    移位运算符的优先级低于算术运算符,高于关系运算符,它们的结合方向是自左至右。
   (1)左移运算符(<<)
    左移运算将一个位串信息向左移指定的位,右端空出的位用0补充。例如014<<2,结果为060,即48。
    左移时,空出的右端用0补充,左端移出的位的信息就被丢弃。在二进制数运算中,在信息没有因移动而丢失的情况下,每左移1位相当于乘2。如4 << 2,结果为16。
   (2)右移运算符(>>)
    右移运算将一个位串信息向右移指定的位,右端移出的位的信息被丢弃。例如12>>2,结果为3。与左移相反,对于小整数,每右移1位,相当于除以2。在右移时,需要注意符号位问题。对无符号数据,右移时,左端空出的位用0补充。对于带符号的数据,如果移位前符号位为0(正数),则左端也是用0补充;如果移位前符号位为1(负数),则左端用0或用1补充,取决于计算机系统。对于负数右移,称用0 补充的系统为“逻辑右移”,用1补充的系统为“算术右移”。以下代码能说明读者上机的系统所采用的右移方法:
     printf("%d\n\n\n", -2>>4);
若输出结果为-1,是采用算术右移;输出结果为一个大整数,则为逻辑右移。
    移位运算与位运算结合能实现许多与位串运算有关的复杂计算。设变量的位自右至左顺序编号,自0位至15位,有关指定位的表达式是不超过15的正整数。以下各代码分别有它们右边注释所示的意义:
     ~(~0 << n)
     (x >> (1 p-n)) & ~(~0 << n)
     new |= ((old >> row) & 1) << (15 – k)
     s &= ~(1 << j)
     for(j = 0; ((1 << j) & s) == 0; j ) ;

参考:https://blog.csdn.net/ZhaoFaxing/article/details/78905066

C语言按位与 按位或 按位异或 按位取反 (一)相关推荐

  1. C语言按位与 按位或 按位异或 按位取反

    与运算:& 两者都为1为1,否则为0 1&1=1,  1&0=0,  0&1=0,  0&0=0 或运算:| 两者都为0为0,否则为1 1|1 = 1,  1| ...

  2. C语言按位与 按位或 按位异或 按位取反(二)

    位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...

  3. 位运算符:按位与(),按位或(|),按位异或(^),取反(~)左移()和右移()

    数据在内存中是以二进制的形式存放的,计算机存储数据的最小单位是位(bit),一个二进制位可以表示两种状态(0和1),一个字节通常由8位二进制位组成.C语言支持按位运算,按位运算也就是对字节或者字中的实 ...

  4. c/c++位操作简介--移位、位与、位或、异或

    概述 C/C++里面位操作符表示为如下:左移位 << ,右移位 >>,位与 &,位或 | ,位异或 ^,按位求反~. 位操作符针对的是补码形式(可参见下面的例子,其实我 ...

  5. C语言编程的按位或返回值,c语言的按位运算符怎么操作!?

    c语言的按位运算符怎么操作!? 答案:2  信息版本:手机版 解决时间 2019-10-06 03:32 已解决 2019-10-05 10:30 就是& | ^ - >> < ...

  6. 位与()、位或(|)、异或(^) 、左移<<、右移>>、原码、反码、补码的简单应用

    一.位与(&).位或(|).异或(^) 1.位与运算(&):两位同时为1,结果才为1,否则为0 参加运算的两个数据,按二进制位进行"&"运算. 运算规则:0 ...

  7. 位运算专题一:位与、位或、位反

    位运算只用于所有的整型!!(char,short,int,long int,long long,unsigned char,unsigned short......),浮点值均不适用!!! 位运算有哪 ...

  8. C语言 =(按位与后赋值)^=(按位异或后赋值) |=(按位或后赋值)

    &=(按位与后赋值) x = 0x02; x &= 0x01; 按位与后的结果为:0x00 x = 0x02; x &= 0x01; 字符 & 的最早历史可以追溯到公元 ...

  9. sql位运算符【(位与)、~(位非)、|(位或)、^(位异或)】与位移

    1.&(位与) 上下运算,按照与的运算规则:0&0=0 :0&1=0:1&1=1 例如: 170 & 75 结果为:0000 0000 0000 1010 再把 ...

最新文章

  1. 数据库初学者_面向初学者的免费6小时数据科学课程
  2. Java根据文件头文件信息判断文件类型
  3. 一个简单的MVP模式案例
  4. 串口服务器常见五大问题解决方案
  5. 微信 iOS 版正式支持深色模式;谷歌宣布彻底取消I/O开发者大会;Visual Studio 2019 16.5发布|极客头条...
  6. Linux dstat 命令
  7. 提问的智慧 程序员成长之路
  8. Kubernetes PV与PVC
  9. android gpu平板 推荐,性能强的不像话,最强安卓平板华为平板M6上手
  10. unraid教程贴备忘
  11. 1074 链表翻转(柳神代码思路)yyds
  12. 基于微博评论的文本情感分析与关键词提取的实战案例~
  13. oss2罗列所有文件
  14. 配置 Vue 实例( 选项 )
  15. python entry如何清空_Python tkinter,从类中清除Entry小部件
  16. Spring源码分析八:Mybatis ORM映射框架原理
  17. 技术干货|昇思MindSpore NLP模型迁移之Bert模型—文本匹配任务(二):训练和评估
  18. 文件管理 磁盘空间管理
  19. VUE项目中如何实现表格数据的懒加载
  20. 微信小程序NFC读写工具

热门文章

  1. Linux_红帽8学习笔记分享_3(文件操作管理)
  2. 利用python的selenium模块向Plant-mPLoc提交数据
  3. 【个人瞎想】乡村个体户经营方法
  4. 面试题之青蛙变态跳台阶问题
  5. C++ (生成二维码,扫描有惊喜)
  6. Redis 慢查询 命令 slowlog
  7. 彻底解决iPhone日历收到垃圾邀请问题
  8. 八年级英语上册单词复习
  9. 计算方法——C语言实现——全主元高斯消元法求解非线性方程
  10. Mysql【注意事项】