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

位运算有哪些呢?& 位与,| 位或,~ 位反,^ 异或,<< 左移,>> 右移,接下来介绍前三个,剩余的在下一篇介绍!

1. & 位与

先来回忆逻辑与:&&两边操作数非零即为真!再进行与运算。(C语言中0='\0'=NULL=false)

而位与则是:将操作数转为二进制表达形式后,以补码的形式进行相与运算。

(1)分析如下代码:

#include<stdio.h>
int main() {char a = 5;char b = -5;char c = 0;c = a && b; //逻辑与,结果为1printf("%d && %d = %d\n",a,b,c);c = a & b; //位与,结果为1printf("%d & %d = %d\n", a, b, c);return 0;
}

对于c=a&&b; //a=5,b=-5,非0即为真(true),1&&1=1,结果为1。

对于c=a&b; //a=5=0000 0101,b=-5=1000 0101(原码)=1111 1011(补码),再进行位与:0000 0101&1111 1011=0000 0001=1,结果也为1。

(2)分析下列代码:

#include<stdio.h>
int main() {int a = 5, b = 7;if(a>10&&++b){}printf("b=%d\n", b); //b=7if (a > 10 & ++b) {}printf("b=%d\n", b); //b=8return 0;
}

对于a>10&&++b:逻辑与运算(特点:0(false)&&任意值=0,故当第一个表达式值为0时,计算机就会偷懒不进行计算第二个表达式;同理逻辑或:1(true)||任意值=1,第二个表达式也不会被计算),故a>10=0(false),第二个表达式将不被运行。故b的值不变,b=7。

对于a>10&++b:位与运算,a>10=0(false)=0000 0000 0000 0000 0000 0000 0000 0000,++b先执行b+=1=8=0000 1000,在进行扩充(有符号数扩充符号位)并使用补码进行与运算(相同为1,相异为0)为:0000 0000 0000 0000 0000 0000 0000 1000,故0&8=0000 0000 0000 0000 0000 0000 0000 0000=0,b=8。

(3)位与运算可以将二进制数的某一位 置为0而其他位保持不变也可以将某一位保持不变,其他位 置为0

例如:若有定义char a = 0xAA; //即a=1010 1010,现想将a变为1010 0010,由于1 与 任何数的结果仍为那个数,故可以令a&(0b1111 0111)或a&(0xF7);当然也可以用还未提到的左移右移取反,令a&~(1<<3):1<<3=0000 0001(1)左移3位,即后面补3个0:0000 0001000=0000 1000(截取低八位),再进行取反~:1111 0111即可。

再如:有定义char a = 0xAA; //即a=1010 1010,现想将其变为0000 1000,由于0 与 任何数结果为0,故令a&(0b0000 1000)或a&(0x08)即可。

2. ~ 位反

位反运算符很容易理解:对于整型数的二进制补码形式进行按位取反(逻辑值:0->1,1->0)即可。

但应注意的是:位反运算符为单目运算符,其不会改变原值!!!单目运算符中只有++(自增运算符),--(自减运算符)可以作用并改变原变量的值

如:定义char a=0x89; //即a=1000 1001,再定义char ch=~a; //则ch=0111 0110,但a的值仍为1000 1001。

3. | 位或

先来回忆逻辑或:||两边操作数非零即为真!再进行或运算。

而位或则是:将操作数转为二进制表达形式后,以补码的形式进行相或运算。

做法类似位与运算,就不举例了。

(1)位或运算可以将二进制数的某一位 置为1而其他位保持不变。

例如:char a=0x89; //即a=1000 1001,要将其变为1001 1001,由于1 或 任何数的结果均为10或任何数的结果仍为那个数,故令a|(0b0001 0000)或a|(0x10)或a|(1<<4)=a|(1左移四位=0000 0001右边添加4个0=0000 0001 0000截取低八位=0001 0000)即可。

位运算专题一:位与、位或、位反相关推荐

  1. 位运算:按位与、按位或、按位异或、按位左移、按位右移

    目录 一.基础知识补充 (1)位运算 (2)二进制的详细操作 二.位运算 (1)按位与(&) (2)按位或(|) (3)按位异或(^) (4)按位左移(<<) (5)按位右移(&g ...

  2. 位运算(按位与、按位或|、按位异或^) 运算规则与实例

    位运算(按位与.按位或.按位异或) 按位与运算符(&) 参加运算的两个数,按二进制位进行"与"运算. 运算规则:同为1,结果为1,否则为0,即 0 & 0= 0 , ...

  3. 位运算全面总结,关于位运算看这篇就够了

    文章目录 1 位运算概述 2 位运算的性质 2.1 运算符的优先级 2.2 位运算符的运算律 3 位运算高级操作 4 负数的位运算 5 位运算的一些应用 6 位运算例题 6.1 更新二进制位 6.2 ...

  4. php二进制应用位运算,【转】PHP 位运算应用口诀

    标签: 位运算应用口诀 清零取位要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形. 2 "< 3 &q ...

  5. c语言10以内位运算,C语言基础知识--位运算

    1.原码,反码,补码: (1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负:其余n-1位为数值位,各位的值可为零或一.当真值为正时,原码.反码.补码数值位 完全相同:当真值为负时, ...

  6. 位运算(按位与、按位或、异或、取反)以及原码、反码、补码

    参考:运算符的计算(按位与 按位或 异或 取反) 作者:一只青木呀 发布时间: 2020-07-23 18:13:55 网址:https://blog.csdn.net/weixin_45309916 ...

  7. 位运算(按位与 、按位或、按位异或、取反、左移右移)

    位运算 与(&) 0&0=0 0&1=0 1&0=0 1&1=1 或(|) 0|0=0 0|1=1 1|0=1 1|1=1 异或(^) 0^0=0 0^1=1 ...

  8. 位运算:按位与、按位或、按位异或、按位非(补码 反码)

    原码 补码 反码 计算机中的符号数有三种表示方法:原码.补码.反码.这三种表示方法都由符号位和数值位两部分组成,符号位1表示负数,0表示正数. 二进制数在内存中是以补码的形式存放的.为了更好理解计算机 ...

  9. Java位运算(按位与、按位或、异或)

    一.位运算 位即二进制位或bit位 所有运算到计算中底层中都会变成位运算,位运算可以提高程序的效率,而且我们在研究JDK或者某个框架的源码时,会发现很多地方都用到了位运算! 例如我们在对数组进行排序时 ...

最新文章

  1. Linux无盘工作站架设实例
  2. 内核驱动漏洞与攻击预防--by MJ0011
  3. Python网络爬虫从入门到实践 -- chapter 1 -- 网络爬虫入门
  4. constraintlayout布局新特性_AMD发布Ryzen PRO 4000系列移动处理器:多了超线程和商用安全特性...
  5. mmap函数_分析由 mmap 导致的内存泄漏
  6. python token发送请求_python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息...
  7. 关于python序列类型的通用操作符_Python—语法基础(3) 序列类型及操作
  8. echart 导出保存图片
  9. php完整表单实例,PHP学习(五) 完整表单实例 HTML内嵌PHP
  10. C# 自动投票和手机号码归属地查询 - 简单程序源码分享(高手飘过)
  11. addeventlistener监听ajax请求_基于h5的history改善ajax列表请求体验
  12. 虚拟机实时迁移解决方案
  13. 分享5款提高工作效率的CAD插件,总有一款适合你
  14. Python人脸检测与人脸数据集的生成
  15. PHP生成腾讯云API签名
  16. 深入浅出contenteditable富文本编辑器
  17. Oracle数据优化,超级全
  18. 微信小程序支付绑定商户号问题
  19. Linux内核编译出错
  20. 地产2022价值启示录:房企必须闯过的“三重门”

热门文章

  1. 猜数字大小小游戏(低级)
  2. c语言输入一行文字 找出其中大写字母,输入一行文字 找出其中的大写字母、小写字母、空格、数字以及其他字符各有多少。 C++...
  3. 操作系统_04_IO相关(个人总结)
  4. 没有信心、不会上云?看紫光云如何突破云“鸿沟”?
  5. Graphic --- Android
  6. 软件测试基础之你的测试覆盖率是多少?
  7. MAC 查询端口被占用情况
  8. c++实现排序算法、swap函数的简单实现
  9. 如何设置qq邮箱服务器smtp
  10. 基于变化点 copula 优化算法中的贝叶斯研究(Matlab代码实现)