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的交换。返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS2015 IIS Express 无法启动 解决办法(转)

因为安装各种乱七八糟的软件&#xff0c;然后不小心把IIS Express卸载掉了&#xff0c;网上下载了一个IIS Express 7&#xff0c;安装之后本地使用VS 2015无法启动调试&#xff0c;F5 无法启动IIS&#xff0c; 再次F5调试&#xff0c;没有反应IIS Express没有启动。 日志记录错…

【数字孪生】数字孪生十问:分析与思考

本文来源&#xff1a;数字孪生DigitalTwin(北京航空航天大学&#xff0c;自动化科学与电气工程学院&#xff0c;数字孪生研究组)摘 要&#xff1a;当前数字孪生备受学术界、工业界、金融界以及政府部门关注。然而各界对数字孪生存在不同的理解和认识&#xff0c;对数字孪生相关…

c语言xc比较大小写,XCTestAPI文档.docx

XCTestAPI文档XCTest准备工作对于新项目&#xff0c;在新建项目界面勾选上UI Tests&#xff1b;对于旧项目&#xff0c;在项目界面点击菜单栏中的FileNewTarget…iOSTestiOS UITesting Bundle。sleepForTimeInterval:线程休眠[NSTread sleepForTimeInterval:1.0f];也可以使用sl…

C语言编写一个备份文件,2014年3月二级C语言上机题库备份.doc

全国计算机等级考试二级C语言上机题库第一套程序填空程序通过定义学生结构体数组&#xff0c;存储了若干个学生的学号、姓名和三门课的成绩。函数fun的功能是将存放学生数据的结构体数组&#xff0c;按照姓名的字典序(从小到大排序)。请在程序的下划线处填入正确的内容并把下划…

图解机器学习

来源&#xff1a;大数据实验室机器学习这个主题已经很普遍了&#xff0c;每个人都在谈论它&#xff0c;但很少有人能够透彻地了解它。当前网络上的一些机器学习文章晦涩难懂&#xff0c;理论性太强&#xff0c;或者通篇云里雾里地介绍人工智能、数据科学的魔力以及未来的工作等…

BZOJ 4819: [Sdoi2017]新生舞会

二次联通门 : BZOJ 4819: [Sdoi2017]新生舞会 /*BZOJ 4819: [Sdoi2017]新生舞会二分 01分数规划 最小费用流二分出一个答案费用流检验*/ #include <cstdio> #include <iostream> #include <queue> #include <cstring>const int BUF 12312312; char …

c语言 复制文件并重命名文件,VS2010 重命名文件:源文件名和目标文件名相同 的解决方案...

想要在“”解决方案资源管理器“”中修改一个已经写好的文件的文件名&#xff0c;如图&#xff1a;在改了几次后就出现了如图的问题&#xff1a;然而在“解决方案资源管理器”中并没有看到&#xff0c;于是我打开了工程在磁盘中的位置文件夹&#xff1a;意外发现了真的存在了一…

Space X和NASA到底有什么关系?

来源&#xff1a;大柳树防务原计划北京时间5月28日发射的载人龙飞船由于天气原因推迟至北京时间5月31日发射。此次发射任务由Space X公司研发的猎鹰9号&#xff08;Falcon 9&#xff09;运载火箭搭载龙飞船&#xff08;Crew Dragon&#xff09;执行&#xff0c;目的是将两名NAS…

菜鸟的Xamarin.Forms前行之路——绪言

作者入门时间不是很久,差不多一年,期间自学的东西比较杂乱,到目前为止,编程方面的知识比较薄弱.之所以做这个系列,也只是因为做了两个月的Xamarin.Forms方面的东西,由于资料和自身实力的原因,过程走的比较艰难,但所幸的是也解决了部分的问题,积累了一些经验.期望通过这个系列,和…

android 滚动画画,Android利用ViewPager实现可滑动放大缩小画廊效果

画廊在很多的App设计中都有&#xff0c;如下图所示&#xff1a;该例子是我没事的时候写的一个小项目&#xff0c;具体源码地址请访问https://www.easck.com/>使用方式布局中添加该自定义控件xmlns:tools"http://www.easck.com/tools"android:layout_width"ma…

人工智能产业发展深度报告:格局、潜力与展望

来源&#xff1a;华泰证券人工智能市场格局人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是利用机器学习和数据分析方法赋予机器模拟、延 申和拓展类人的智能的能力&#xff0c;本质上是对人类思维过程的模拟。AI 概念最早始于 1956 年 的达特茅斯会…

DVA框架统一处理所有页面的loading状态

dva 有一个管理 effects 执行的 hook&#xff0c;并基于此封装了 dva-loading 插件。通过这个插件&#xff0c;我们可以不必一遍遍地写 showLoading 和 hideLoading&#xff0c;当发起请求时&#xff0c;插件会自动设置数据里的 loading 状态为 true 或 false 。然后我们在渲染…

2022第十二届PostgreSQL中国技术大会-核心PPT资料下载

一、峰会简介 本次大会以“突破•进化•共赢 —— 安全可靠&#xff0c;共建与机遇”为主题&#xff0c;助力中国数据库基础软件可掌控、可研究、可发展、可生产&#xff0c;并推动数据库生态的繁荣与发展。大会为数据库从业者、数据库相关企业、数据库行业及整个IT产业带来崭…

android webview fragment,android studio中Fragment使用webview返回上一頁的問題

在Fragment中使用了騰訊的X5 webview,雖然好用,但是在Fragment中傳遞消息困難,想要返回上一頁,還得各種消息傳遞什么的,麻煩.可是在Fragment中又不能使用onKeyDown,那怎么辦了?哎,我是太菜了,也不想動腦子,那就在Fragment的最上面加了一個標題欄,里面放了一個textView標簽,監聽…

Ionic3 环境搭建以及基础配置实现(更新中)

GitHub:https://github.com/Teloi 环境配置输入以下命令安装 Ionic &#xff08;如果刚才设置了淘宝镜像源&#xff0c;可以使用 cnpm 代替 npm&#xff09;&#xff1a;npm install -g ionic需要注意的是&#xff0c;如果之前安装过 Ionic 2 的 beta 版本&#xff0c;需要先卸…

饶毅:脑、物理、化学、 生物、心理认知的交叉研究

本文转自公众号&#xff1a;脑科学学术笔记饶毅&#xff1a;脑、物理、化学、生物、心理认知的交叉研究陈鹏&#xff1a;作为一名科学家&#xff0c;饶老师用分子生物学和遗传学研究神经系统的发育和功能&#xff0c;从果蝇到人脑&#xff0c;从细胞到高级功能&#xff0c;他用…

android调用webservice传参数,android调用webservice接口获取信息

我的有一篇博客上讲了如何基于CXF搭建webservice&#xff0c;service层的接口会被部署到tomcat上&#xff0c;这一篇我就讲一下如何在安卓中调用这些接口传递参数。1.在lib中放入ksoap2的jar包并导入2.在xml 配置文件中加入&#xff1a;3.接下来就要通过代码调用借口了String W…

YYT 0659 - 2008全自动凝血分析仪

YYT 0659 - 2008全自动凝血分析仪转载于:https://www.cnblogs.com/sunlyk/p/7427625.html

构建城市大脑的未来标准,9个值得探索的规范

简述&#xff1a;50年来互联网从网状向类脑架构进化并与城市建设结合是城市大脑产生的根源。城市大脑建设是工程问题&#xff0c;但首先也是基础科学问题&#xff0c;掌握科技发展规律是发现和构建城市大脑建设标准的基础。通过总结互联网大脑模型的特征&#xff0c;提出了城市…

android 下载器布局,Android Studio下载约束布局失败

To install:– com.android.support.constraint:constraint-layout-solver:1.0.0-alpha3 (extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha3)– com.android.support.constraint:constraint-layout:1.0.0-alpha3 (extras;m2reposito…