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

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

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

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

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

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语言plc库,PLC编程-C语言.ppt

    PLC编程-C语言.ppt 华中数控培训讲义 PLC编程,C语言编程,PLC控制的范围,数控机床所受到的控制可分为两类数字控制和顺序控制. 数字控制主要指对各进给轴进行精确的位置控制,包括轴移 动距离 ...

  2. c语言shengchen图像,430编程C语言常识(IAR)(二)结构体与联合体

    回复: 107 430编程C语言常识(IAR)(二)结构体与联合体 (288035412) 出0入0汤圆 电梯直达 发表于 2012-4-7 18:36:29 | 只看该作者 |倒序浏览 |阅读模式 ...

  3. c语言计算时间的编程,C语言实现时间戳转日期的算法(推荐)

    1.算法 时间是有周期规律的,4年一个周期(平年.平年.平年.闰年)共计1461天.Windows上C库函数time(NULL)返回的是从1970年1月1日以来的毫秒数,我们最后算出来的年数一定要加上 ...

  4. c语言数组的一维编程,C语言编程一维数组的使用.doc

    C语言编程一维数组的使用 实验 一维数组的使用 [实验目的 1掌握数组定义和初始化方法. 2熟悉使用字符数组处理字符串处理的方法.实验内容10个学生的成绩,求平均成绩,并将低于平均成绩的分数打印出来. ...

  5. c语言sqlserver进行odbc编程,c语言之odbc编程指南.doc

    c语言之odbc编程指南 ?摘要本文在介绍了ODBC(开放性数据库连接,Open? DataBase? Connectivity)运行机制的基础上,着重讨论了VisualC++2.0下利用ODBCAP ...

  6. c语言程序第一章编程,c语言程序的设计第一章 C语言编程入门.ppt

    c语言程序的设计第一章 C语言编程入门 第1章 C语言编程入门 本章是本书的入门篇,专为初学者熟悉编程过程.掌握程序结构而准备的. 本章学习目标 ? 1)? 能够通过模仿与改变来构造带有测试函数的C语 ...

  7. c语言计算年龄的编程,C语言实战开发: 利用if 实现“税后工资”,“输出年龄”...

    C语言实战开发 2019-11-15 用所学知识编写简单的两个程序 程序一:给定工资,计算税后工资并输出 程序二:以阿拉伯数字给定年龄,输出数字年龄的英文翻译 一.税后工资实战 /* 输入工资 计算税 ...

  8. c语言源程序的下载,编程(C语言源程序代码)

    计算机 C语言 已知 S=1+1/(1+2)+1/(1+2+3)+-+1/(1+2+3+-+N) ,当 N 的值为 50 时,求 S 的值. 要求:按四舍五入的方式精确到小数点后第四位. #inclu ...

  9. c语言成语接龙编程,C语言完成成语接龙小游戏

    用C语言实现成语接龙小游戏(新手上路,大神勿喷) 1.首先需要找到一个成语库(从网上下载即可,保存为.txt文件) 2.整体思路如下 由于要用的成语保存在文件里,一边用一边读取会降低代码的效率,所以我 ...

最新文章

  1. Ubuntu 14.04 LTS, 64bit, cuda 7, Caffe环境配置编译和安装
  2. 【错误记录】Android 中调用 Process 命令行执行指令 ( java.lang.IllegalThreadStateException: process hasn‘t exited )
  3. 关于变量作用域的一点整理
  4. 【week2】 构建之法 读后感及问题
  5. Android一个ListView列表之中插入两种不同的数据
  6. 靖江机器人怎么样_铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?...
  7. 2020洪灾地图_卫星地图看洪灾:为何湖北易发洪水?
  8. 老男孩教育每日一题-2017-04-25:怎样产生一个子shell?
  9. 系统监控Zabbix部署文档
  10. 查询添加条件_从文件夹中提取符合条件的记录,只需一键
  11. 分布式系统下数据一致性
  12. 关于 MRC 开发中的一些细节
  13. YDOOK: USB 转 TTL 模块 连线使用实例教程
  14. HttpClient使用详解
  15. 【微信测试号实战——02】编写你独有的微信消息模板
  16. 邮件发回软件错误信息
  17. 存储公司芯天下IPO上市申请获受理---义嘉泰骄傲的合作伙伴
  18. [USACO 2010 Feb S]Chocolate Eating
  19. excel文件导出、下载的响应类型设置
  20. ROS工业机器人和工业自动化竞赛ARIAC 2021即将启动

热门文章

  1. 关于人生困惑的62个问题的回答
  2. 麻辣烫选址要考虑竞品分布,用户画像等
  3. 一份稳进Shopee的简历长啥样?
  4. 学习日记day03 coreldraw
  5. 《纳什均衡与博弈论》
  6. 谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现(更新优化思路)
  7. kali中网卡、ssh、apache的配置与开启
  8. spring-security-5.0版本的xml基本配置
  9. Vue处理404跨域错误
  10. 如何将word转化为pdf(Java版)