c语言中异或指令,C语言总结之异或运算的一些特性及巧妙应用
原标题: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语言总结之异或运算的一些特性及巧妙应用相关推荐
- c语言中预处理指令的作用,C语言中常用预处理指令
转载自 https://blog.csdn.net/farsight2009/article/details/58602886 姓名:张艳博 学号:17021223249 [嵌牛导读]: C语言中常用 ...
- verilog语言中的@什么意思 verilog语言中的@什么意思
verilog语言中的@什么意思 verilog语言中的@什么意思 2012-05-27 22:47 在英语中@ 读at,也就是在--的时候,这个小学应该学过,对吧.verilog中@ 的含义就是触发 ...
- c加加属于面向对象的程序设计语言吗,下列语言中属于面向对象的程序设计语言是______。A、Visual BasicB、PASCALC、CD、FORTRAN...
下列语言中属于面向对象的程序设计语言是______.A.Visual BasicB.PASCALC.CD.FORTRAN 更多相关问题 经纬仪如存在指标差,将使观测结果出现( ). 德治的约束作用主要 ...
- c语言异或运算编程,C语言异或运算的一些特性及巧妙应用
1.一个数和自己做异或的结果是0.如果需要一个常数0,x86平台的编译器可能会生成这样的指令: xorl %eax, %eax.不管eax寄存器里的值原来是多少,做异或运算都能得到0,这条指令比同样效 ...
- c语言中变量的大小,C语言变量定义
C语言变量定义 程序设计就是让计算机按照一定的指令来进行工作,可以说数据的处理是程序设计的主要任务.那么数据是怎么加入到计算机的内存中呢?下面是小编分享的C语言变量定义,欢迎大家阅读!更多相关信息请关 ...
- c语言中调用函数fn,C语言常见的函数调用
C语言常见的函数调用 isatty,函数名,主要功能是检查设备类型,判断文件描述词是否为终端机. 函数名: isatty 用 法: int isatty(int desc); 返回值:如果参数desc ...
- c语言中的指数位,c语言的指数符号
匿名用户 1级 2009-03-29 回答 C语言符号集包括:英文字母.数字和一些有特定含义的标点符号.任何C程序都是由C的符号集里的符号构成具有一定含义的语句,再由这些语句组成程序. 一.字母.数字 ...
- 语言中拟合函数 计算aic_Go语言函数深度解析(中)
上回函数深度解析给大家聊了一些函数的基本知识,不知道还有没有人记得,不记得赶紧回去复习! 他们是 go语言中函数的基本原理 单/多个同/不同类型参数 单/多个同/不同类型返回值 值传递,引用传递 函数 ...
- c语言中合法转义字符,判断c语言合法转义字符
满意答案 UniTubeStar 2018.01.11 采纳率:45% 等级:12 已帮助:5850人 单独一个 \ 不是合法转义字符. 转义字符 就是指 反斜杠后面的字符,不按原意 解释,而要 ...
最新文章
- MySQL数据库字符集和整理
- 仿真环境跟车2分钟,就让自动驾驶系统撞上马路牙子,攻破率超90%,多传感器融合系统都失效...
- 【计算理论】上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 | 语法分析树 )
- C# WPF MVVM开发框架Caliburn.Micro IResult和协同程序⑥
- IDEA解决Maven项目编译后classes文件中没有.xml或.properties问题
- Java Interview Questions (1)
- javaweb JAVA JSP智能社区管理系统JSP小区物业管理系统物JSP小区管理系统源码 JSP物业社区管理系统
- PeakDo毫米波无线投屏器,你的无线图传神器
- matlab三维投影图,matlab三维图投影轮廓
- 西安周边旅游++军事纪实
- html 实现音乐的波形,GitHub - wanlixi/html5-audio: 展示html5提供的强大的音频控制API...
- Python中的shuffle()函数
- Pomodoro Technique番茄钟的理解
- docker cp传递整个目录
- whois命令_WHOIS使用Whois搜索
- 我应该买Arduino还是Raspberry Pi?
- Redhat7.4 同步阿里云镜像rpm包并自建本地yum仓库
- 基于Java+SpringMVC+Mybaties+jsp+layui实现的宿舍管理系统设计与实现
- Virtual Box 安装Win10保姆式教程
- Web端打开本地可执行的exe程序
热门文章
- 算法--递归--走台阶问题(2种递归+递归改循环)
- mysql最左_Mysql最左原则
- python最好用的助手_推荐5款好用的Python工具
- Python自定义时间间隔访问网页
- Codeforces Round #697 (Div.3) A~G解题报告与解法证明
- Android 利润,惊人利润:Android系统免费背后影藏的巨大利润
- 【RippleNet】(一)preprocessor.py【未完】
- 开源开放 | 图数据交互可视化分析框架 InteractiveGraph v0.3 版本发布
- 技术动态 | 清华大学开源OpenKE:知识表示学习平台
- 最全的Pycharm debug技巧