与运算:&
两者都为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. VTK:参数样条用法实战
  2. SpringMVC的使用与requestMapper的使用
  3. opengl2 vtk 编译_编译和使用VTK时值得注意的点(待续)
  4. C++ 获取函数耗时
  5. 语言条件语序心得_考研分享 | 王远新语言学教程要点总结(第五章)
  6. ucc编译器(词法分析)
  7. SAP License:中国集团管控存在的主要问题
  8. 前端工作学习相关网站收集整理
  9. 2022年 12 款最佳软件开发工具
  10. Node.js学习9~Egg.js框架学习和部署实战
  11. 美化滚动条jquery.nicescroll.js
  12. 【2021LaTeX模板分享】数学建模竞赛国赛
  13. Discuz!论坛系统模板目录结构注释说明(以default模板为例)
  14. gatk过滤_GATK--使用转载
  15. 英特服务器的spec整数性能,主流基准测试TPC与SPEC解读
  16. PS制作3D立体字、透明气泡
  17. ios sdk 穿山甲_iOS 穿山甲广告 SDK 的使用
  18. 计算机考研一志愿不满,【建议收藏】40所不歧视本科 保护一志愿院校 内含大量985/211!...
  19. css视频教程面试题,前端基础面试题(CSS类)
  20. java仪表盘_GitHub - Jensenczx/Dashboard: 通过Java实现的仪表盘

热门文章

  1. pythonfor语句举例_pythonfor循环语句例子
  2. 2021年中国放电电阻器市场趋势报告、技术动态创新及2027年市场预测
  3. android 6.0 连接电脑,华为mate7手机EMUI4.0安卓6.0连接电脑方法
  4. c语言标准库详解(零):总述
  5. protoc-gen-go 安装踩坑记录
  6. hardmard积 用什么符号表示_矩阵的Hadamard积与符号模式
  7. c++算法训练(4)
  8. Apache Kafka教程--Kafka新手入门
  9. RTSP 协议分析 (一)
  10. Ubuntu 设置右键添加新文件