c语言异或运算编程,C语言异或运算的一些特性及巧妙应用
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语言异或运算的一些特性及巧妙应用相关推荐
- c语言plc库,PLC编程-C语言.ppt
PLC编程-C语言.ppt 华中数控培训讲义 PLC编程,C语言编程,PLC控制的范围,数控机床所受到的控制可分为两类数字控制和顺序控制. 数字控制主要指对各进给轴进行精确的位置控制,包括轴移 动距离 ...
- c语言shengchen图像,430编程C语言常识(IAR)(二)结构体与联合体
回复: 107 430编程C语言常识(IAR)(二)结构体与联合体 (288035412) 出0入0汤圆 电梯直达 发表于 2012-4-7 18:36:29 | 只看该作者 |倒序浏览 |阅读模式 ...
- c语言计算时间的编程,C语言实现时间戳转日期的算法(推荐)
1.算法 时间是有周期规律的,4年一个周期(平年.平年.平年.闰年)共计1461天.Windows上C库函数time(NULL)返回的是从1970年1月1日以来的毫秒数,我们最后算出来的年数一定要加上 ...
- c语言数组的一维编程,C语言编程一维数组的使用.doc
C语言编程一维数组的使用 实验 一维数组的使用 [实验目的 1掌握数组定义和初始化方法. 2熟悉使用字符数组处理字符串处理的方法.实验内容10个学生的成绩,求平均成绩,并将低于平均成绩的分数打印出来. ...
- c语言sqlserver进行odbc编程,c语言之odbc编程指南.doc
c语言之odbc编程指南 ?摘要本文在介绍了ODBC(开放性数据库连接,Open? DataBase? Connectivity)运行机制的基础上,着重讨论了VisualC++2.0下利用ODBCAP ...
- c语言程序第一章编程,c语言程序的设计第一章 C语言编程入门.ppt
c语言程序的设计第一章 C语言编程入门 第1章 C语言编程入门 本章是本书的入门篇,专为初学者熟悉编程过程.掌握程序结构而准备的. 本章学习目标 ? 1)? 能够通过模仿与改变来构造带有测试函数的C语 ...
- c语言计算年龄的编程,C语言实战开发: 利用if 实现“税后工资”,“输出年龄”...
C语言实战开发 2019-11-15 用所学知识编写简单的两个程序 程序一:给定工资,计算税后工资并输出 程序二:以阿拉伯数字给定年龄,输出数字年龄的英文翻译 一.税后工资实战 /* 输入工资 计算税 ...
- c语言源程序的下载,编程(C语言源程序代码)
计算机 C语言 已知 S=1+1/(1+2)+1/(1+2+3)+-+1/(1+2+3+-+N) ,当 N 的值为 50 时,求 S 的值. 要求:按四舍五入的方式精确到小数点后第四位. #inclu ...
- c语言成语接龙编程,C语言完成成语接龙小游戏
用C语言实现成语接龙小游戏(新手上路,大神勿喷) 1.首先需要找到一个成语库(从网上下载即可,保存为.txt文件) 2.整体思路如下 由于要用的成语保存在文件里,一边用一边读取会降低代码的效率,所以我 ...
最新文章
- Ubuntu 14.04 LTS, 64bit, cuda 7, Caffe环境配置编译和安装
- 【错误记录】Android 中调用 Process 命令行执行指令 ( java.lang.IllegalThreadStateException: process hasn‘t exited )
- 关于变量作用域的一点整理
- 【week2】 构建之法 读后感及问题
- Android一个ListView列表之中插入两种不同的数据
- 靖江机器人怎么样_铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?...
- 2020洪灾地图_卫星地图看洪灾:为何湖北易发洪水?
- 老男孩教育每日一题-2017-04-25:怎样产生一个子shell?
- 系统监控Zabbix部署文档
- 查询添加条件_从文件夹中提取符合条件的记录,只需一键
- 分布式系统下数据一致性
- 关于 MRC 开发中的一些细节
- YDOOK: USB 转 TTL 模块 连线使用实例教程
- HttpClient使用详解
- 【微信测试号实战——02】编写你独有的微信消息模板
- 邮件发回软件错误信息
- 存储公司芯天下IPO上市申请获受理---义嘉泰骄傲的合作伙伴
- [USACO 2010 Feb S]Chocolate Eating
- excel文件导出、下载的响应类型设置
- ROS工业机器人和工业自动化竞赛ARIAC 2021即将启动