原标题:C语言总结之异或运算的一些特性及巧妙应用

1.一个数和自己做异或的结果是0。如果需要一个常数0,x86平台的编译器可能会生成这样的指令:

xorl %eax, %eax。不管eax寄存器里的值原来是多少,做异或运算都能得到0,这条指令比同样效果的

movl $0, %eax指令快,直接对寄存器做位运算比生成一个立即数再传送到寄存器要快一些。

2.从异或的真值表中可以看出,和0做异或保持原值不变,和1做异或得到原值的相反值。可以利用这个特性配合掩码实现某些位的翻转,例如:

1. unsigned int a, b, mask = 1U << 6;

2. a = 0x12345678;

3. b = a ^ mask; /* flip the 6th bit */

3.如果a1 ^ a2 ^ a3 ^ … ^ an的结果是1,则表示a1、a2、a3…an之中1的个数为奇数个,否则为偶数个。这条性质可用于奇偶校验(Parity Check),比如在串口通信过程中,每个字节的数据都计算一个校验位,数据和校验位一起发送出去,这样接收方可以根据校验位粗略地判断接收到的数据是否有误。

4. x ^ x ^ y == y,因为x ^ x == 0,0 ^ y == y。这个性质有什么用呢?我们来看这样一个问题:交换两个变量的值,不得借助额外的存储空间,所以不能采用temp = a; a = b; b = temp;的办法。利用位运算可以这样做交换:

1. a = a ^ b;

2. b = b ^ a;

3. a = a ^ b;

分析一下这个过程。为了避免混淆,把a和b的初值分别记为a0和b0。第一行,a = a0 ^ b0;第二行,把a的新值代入,得到b = b0 ^ a0 ^ b0,等号右边的b0相当于上面公式中的x,a0相当于y,所以结果为a0;第三行,把a和b的新值代入,得到a = a0 ^ b0 ^ a0,结果为b0。注意这个过程不能把同一个变量跟自己交换,而利用中间变量temp则可以交换。

0异或0=0,1异或0=1,0异或1=1,1异或1=0(同为0,异为1。

程序中有三种演算子:XOR、xor、 ^。

口诀:相同取0,相异取1。(二进制)

异或的巧妙应用

C语言中若需要交换两个变量的值,除了通常使用的借用中间变量进行交换外,还可以利用异或,仅使用两个变量进行交换,如:

a=a^b;

b=a^b;

a=a^b;

这样就完成了a与b的交换。返回搜狐,查看更多

责任编辑:

c语言中异或指令,C语言总结之异或运算的一些特性及巧妙应用相关推荐

  1. c语言中预处理指令的作用,C语言中常用预处理指令

    转载自 https://blog.csdn.net/farsight2009/article/details/58602886 姓名:张艳博 学号:17021223249 [嵌牛导读]: C语言中常用 ...

  2. verilog语言中的@什么意思 verilog语言中的@什么意思

    verilog语言中的@什么意思 verilog语言中的@什么意思 2012-05-27 22:47 在英语中@ 读at,也就是在--的时候,这个小学应该学过,对吧.verilog中@ 的含义就是触发 ...

  3. c加加属于面向对象的程序设计语言吗,下列语言中属于面向对象的程序设计语言是______。A、Visual BasicB、PASCALC、CD、FORTRAN...

    下列语言中属于面向对象的程序设计语言是______.A.Visual BasicB.PASCALC.CD.FORTRAN 更多相关问题 经纬仪如存在指标差,将使观测结果出现( ). 德治的约束作用主要 ...

  4. c语言异或运算编程,C语言异或运算的一些特性及巧妙应用

    1.一个数和自己做异或的结果是0.如果需要一个常数0,x86平台的编译器可能会生成这样的指令: xorl %eax, %eax.不管eax寄存器里的值原来是多少,做异或运算都能得到0,这条指令比同样效 ...

  5. c语言中变量的大小,C语言变量定义

    C语言变量定义 程序设计就是让计算机按照一定的指令来进行工作,可以说数据的处理是程序设计的主要任务.那么数据是怎么加入到计算机的内存中呢?下面是小编分享的C语言变量定义,欢迎大家阅读!更多相关信息请关 ...

  6. c语言中调用函数fn,C语言常见的函数调用

    C语言常见的函数调用 isatty,函数名,主要功能是检查设备类型,判断文件描述词是否为终端机. 函数名: isatty 用 法: int isatty(int desc); 返回值:如果参数desc ...

  7. c语言中的指数位,c语言的指数符号

    匿名用户 1级 2009-03-29 回答 C语言符号集包括:英文字母.数字和一些有特定含义的标点符号.任何C程序都是由C的符号集里的符号构成具有一定含义的语句,再由这些语句组成程序. 一.字母.数字 ...

  8. 语言中拟合函数 计算aic_Go语言函数深度解析(中)

    上回函数深度解析给大家聊了一些函数的基本知识,不知道还有没有人记得,不记得赶紧回去复习! 他们是 go语言中函数的基本原理 单/多个同/不同类型参数 单/多个同/不同类型返回值 值传递,引用传递 函数 ...

  9. c语言中合法转义字符,判断c语言合法转义字符

    满意答案 UniTubeStar 2018.01.11 采纳率:45%    等级:12 已帮助:5850人 单独一个 \ 不是合法转义字符. 转义字符 就是指 反斜杠后面的字符,不按原意 解释,而要 ...

最新文章

  1. MySQL数据库字符集和整理
  2. 仿真环境跟车2分钟,就让自动驾驶系统撞上马路牙子,攻破率超90%,多传感器融合系统都失效...
  3. 【计算理论】上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 | 语法分析树 )
  4. C# WPF MVVM开发框架Caliburn.Micro IResult和协同程序⑥
  5. IDEA解决Maven项目编译后classes文件中没有.xml或.properties问题
  6. Java Interview Questions (1)
  7. javaweb JAVA JSP智能社区管理系统JSP小区物业管理系统物JSP小区管理系统源码 JSP物业社区管理系统
  8. PeakDo毫米波无线投屏器,你的无线图传神器
  9. matlab三维投影图,matlab三维图投影轮廓
  10. 西安周边旅游++军事纪实
  11. html 实现音乐的波形,GitHub - wanlixi/html5-audio: 展示html5提供的强大的音频控制API...
  12. Python中的shuffle()函数
  13. Pomodoro Technique番茄钟的理解
  14. docker cp传递整个目录
  15. whois命令_WHOIS使用Whois搜索
  16. 我应该买Arduino还是Raspberry Pi?
  17. Redhat7.4 同步阿里云镜像rpm包并自建本地yum仓库
  18. 基于Java+SpringMVC+Mybaties+jsp+layui实现的宿舍管理系统设计与实现
  19. Virtual Box 安装Win10保姆式教程
  20. Web端打开本地可执行的exe程序

热门文章

  1. 算法--递归--走台阶问题(2种递归+递归改循环)
  2. mysql最左_Mysql最左原则
  3. python最好用的助手_推荐5款好用的Python工具
  4. Python自定义时间间隔访问网页
  5. Codeforces Round #697 (Div.3) A~G解题报告与解法证明
  6. Android 利润,惊人利润:Android系统免费背后影藏的巨大利润
  7. 【RippleNet】(一)preprocessor.py【未完】
  8. 开源开放 | 图数据交互可视化分析框架 InteractiveGraph v0.3 版本发布
  9. 技术动态 | 清华大学开源OpenKE:知识表示学习平台
  10. 最全的Pycharm debug技巧