4个按位逻辑运算符都用于整型数据,包括char。之所以叫作按位(bitwise)运算,是因为这些操作都是针对每一个位进行,不影响它左右两边的位。不要把这些运算符与常规的逻辑运算符(&&、||和!)混淆,常规的逻辑运算符操作的是整个值。

1.二进制反码或按位取反:~

一元运算符~ 把1变为0,把0变为1。如下例子所示:

~(10011010)  // expression (01100101)  // resulting value

假设val的类型是unsigned char,已被赋值为2。在二进制中,00000010表示2。那么,~val的值是11111101,即253。注意,该运算符不会改变val的值,就像3 * val不会改变val的值一样,val仍然是2。但是,该运算符确实创建了一个可以使用或赋值的新值:

newval = ~val;printf("%d", ~val);

如果要把val的值改为~val,使用下面这条语句:

val = ~val;

2.按位与:&

二元运算符&通过逐位比较两个运算对象,生成一个新值。对于每个位,只有两个运算对象中相应的位都为1时,结果才为1(从真/假方面看,只有当两个位都为真时,结果才为真)。因此,对下面的表达式求值:

(10010011) & (00111101)  // expression

evaluates to the following value:

(00010001)               // resulting value

C有一个按位与和赋值结合的运算符:&=。下面两条语句产生的最终结果相同:

val &= 0377;val = val & 0377;

3.按位或:|

二元运算符|,通过逐位比较两个运算对象,生成一个新值。对于每个位,如果两个运算对象中相应的位为1,结果就为1(从真/假方面看,如果两个运算对象中相应的一个位为真或两个位都为真,那么结果为真)。因此,对下面的表达式求值:

(10010011) | (00111101)  // expression

除了编号为6的位,这两个运算对象的其他位至少有一个位为1,得:

(10111111)              // resulting value

C有一个按位或和赋值结合的运算符:|=。下面两条语句产生的最终作用相同:

val |= 0377;val = val | 0377;

4.按位异或:^

二元运算符逐位比较两个运算对象。对于每个位,如果两个运算对象中相应的位一个为1(但不是两个为1),结果为1(从真/假方面看,如果两个运算对象中相应的一个位为真且不是两个为同为1,那么结果为真)。因此,对下面表达式求值:

(10010011) ^ (00111101)  // expression

编号为0的位都是1,所以结果为0,得:

(10101110)               // resulting value

C有一个按位异或和赋值结合的运算符:^=。下面两条语句产生的最终作用相同:

val ^= 0377;val = val ^ 0377;

c语言 异或_C语言位逻辑运算符的四种逻辑:取反,并,或,异或相关推荐

  1. 定义一个宏,实现对数据a的第n位置位、清零、取反

    今天去面试,被问到写一个宏,实现对一个数据的第n位取反的问题,当时蒙了没做出来,现在对数据的第n位置位.清零.取反进行总结一下 置位操作: #define M1(a,n)    (a|(1<&l ...

  2. c语言笔记照片_c语言笔记

    如何看懂一个程序,分三步 1. 流程 2. 每个语句的功能 3. 试数 对于一些小程序的算法 尝试自己去编程解决它,大部分人都无法自己解决 如果解决不了,尝试看答案 关键要把答案看懂,这个要花很大的精 ...

  3. c语言 动态数组_C语言的学习笔记!助你一路成长!

    1.C语言中函数参数传递是按照"值传递"进行的,即单向传递. 2.函数原型:函数类型 函数名(参数类型,参数类型--),可以不必加参数名,因为操作系统不检查参数名. 3.数组作为实 ...

  4. java和c语言的区别_C语言为何不会过时?你需要掌握多少种语言?

    关注.星标公众号,不错过精彩内容 整理/排版:付斌 转自:嵌入式ARM 01 为什么C语言不会过时 评价任何一门编程语言,都是招人骂的.永远是这样.就像是春寒料峭的季节, 街上穿棉袄和穿单衣的擦肩而过 ...

  5. window直接运行不需要环境的软件是什么语言开发的_C语言为何不会过时?你需要掌握多少种语言?_C 语言...

    01为什么C语言不会过时 评价任何一门编程语言,都是招人骂的.永远是这样.就像是春寒料峭的季节, 街上穿棉袄和穿单衣的擦肩而过,双方一定是同时在心里出现了两个字:"s b!"这个在 ...

  6. c语言在线编译器_C语言和汇编语言是什么?他们之间可以有怎样的合作?为你解析...

    什么是c语言: C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言;尽管C语言提供了许 ...

  7. c语言实现二分法_C语言实现二分法求解方程在区间内的根

    C语言实现二分法求解方程在区间内的根. 设有非线性方程: 其中, 为 上连续函数且设 (不妨设方程在 内仅有一个实根),求上述方程实根的二分法过程,就是将含根区间[a,b]逐步分半,检查函数值符号的变 ...

  8. java实现c语言的函数_C语言实现返回字符串函数的四种方法

    前言 C语言返回字符串函数共有四种方式,分别如下: 使用堆空间,返回申请的堆地址,注意释放 函数参数传递指针,返回该指针 返回函数内定义的静态变量(共享) 返回全局变量 下面来看看详细的介绍 其实就是 ...

  9. c语言饿结构_C语言的四种程序结构

    C语言的四种程序结构 尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电 ...

  10. c语言求素数_C语言 | 求100~200的素数

    "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...

最新文章

  1. CSS魔法堂:重拾Border之——图片作边框
  2. 51 时间片系统 纯c语言,51单片C语言学习.doc
  3. 刚安装了Fedora32,尝尝鲜~,哈哈~~~
  4. 从零入门 Serverless | 一文详解 Serverless 技术选型
  5. python字符串换行连接_零基础学python_03_字符串(拼接+换行+制表符)
  6. 关于SAP Cloud for Customer Cloud Application Studio登录失败的问题
  7. 整理iOS9适配中出现的坑
  8. 69. Sqrt(x)010(二分法求解+详解注释)
  9. Error: Cannot find module ‘webpack-cli/bin/config-yargs‘ 解决办法
  10. POJ1177(扫描线求周长并)
  11. flash游戏和HTML5游戏,Flash动画和H5小游戏哪个更好?
  12. java简单幸运抽奖系统_java实现幸运抽奖系统
  13. 帆软报表参数传给网络报表_统计图表FineReport中程序数据集传参使用解决方案...
  14. 个人作业 项目alpha版本测试
  15. 安装CAD缺少html,cad缺少ac1st16.dll、在启动cad 或安装cad 时缺少aclst16.dll解决方案...
  16. Outlook邮件创建的规则失效,可能的原因
  17. 全球经济环境剧烈波动,Masterboxan INC如何在巨浪中顺流而行
  18. matplotlib 进阶之Artist tutorial(如何操作Atrist和定制)
  19. 当数据可视化和艺术与卑微的组织结构图碰撞时
  20. 从算法上解读自动驾驶是如何实现的?

热门文章

  1. 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用
  2. 《HTML与CSS入门经典(第8版)》——2.5 测试Web内容
  3. 功能设计与交互设计的冲突和融合_邓昆
  4. 学习Maven命令中
  5. word文档总让正文与目录分开在不同的页——分页符的使用
  6. Linux学习笔记3 - 目录和文件管理
  7. java人员工作建议_给JAVA设计开发新手的一些建议和意见(1)
  8. python 清华镜像_树莓派raspberry4B入坑指南 part-1 virtualenv安装python
  9. access通过身份证号提取性别_从身份证号码中提取出生年月,性别等都不掌握,那就真的Out了...
  10. matlab基于dct的图像压缩编码解码_基于深度学习的视频压缩方法简介