位运算是C语言的一大特色,利用异或运算可以实现交换两个数,原理是一个整数与另外一个数进行两次异或运算仍然是其本身,基本原理用式子表达如下:

(1) A ^ A = 0;

(2) A = A ^B;

(3) B = A ^B;(相当于B = A ^ B ^ B ,即 B = A)

(4) A= A ^ B;(相当于A = A ^B ^A ,即A = B)

利用位运算不仅提高了代码的执行速度,而且此处还减少了对辅助变量的需求,因此提高了程序的效率。

一个具体的程序如下:

  1. #include<stdio.h>
  2. void swap(int *a, int *b)
  3. {
  4. *a = (*a)  ^  (*b);
  5. *b = (*a)  ^  (*b);
  6. *a = (*a)  ^  (*b);
  7. }
  8. int main(void)
  9. {
  10. int a, b;
  11. printf("please input two integers for example 3 4/n");
  12. scanf("%d %d",&a,&b);
  13. printf("Before swap a = %d, b = %d/n",a,b);
  14. swap(&a,&b);
  15. printf("After swap a = %d, b = %d/n",a,b);
  16. }  

不得不说赞两句 硬盘上的二进制数据 用这个方法有效地交换数据 不需要第三方变量 实在是不错

利用位运算和指针实现的交换两个数的程序相关推荐

  1. php 位运算与权限,PHP巧妙利用位运算实现网站权限管理的方法

    首先我们先定义4个常量来设定四种权限: ===================================== define(ADD,1);//增加数据库记录的权限 define(UPD,2);/ ...

  2. 利用位运算解决 N 皇后问题

    题目: LeetCode 51. N-Queens 分析: N 皇后问题是考查递归回溯的经典问题,深度优先搜索的难点在于如何剪枝,在这个问题里面的剪枝,我们需要利用额外的空间去记录当前行的有效空位,只 ...

  3. C# 利用位运算传递多个参数方法

    前言 在工作中用sendMessage的方法向另外一个进程中传递窗体的位置,长度,宽度四个值,但是sendMessage的方法签名中只有两个参数.于是在网上找到了一些代码,找到了这个利用位运算来合并参 ...

  4. 利用位运算控制开关灯问题

    <C++笔记> 利用位运算控制开关灯问题 新手上路,可能有很多不足的地方,欢迎大家多多在留言区提出自己的观点以及更好的办法. 问题描述:俱乐部一共有32盏灯,设计一个灯光控制系统,共有4部 ...

  5. java 不用中间变量_java异或运算不使用中间变量交换两个数(Java版)详细分解...

    Java的异或运算^,这个小不点"^"就是Java的异或运算符,其特性如下:真^假=真假^真=真 假^假=假 真^真=假,它却是说明了Java异或运算的基本法则,那就是:只要两个条 ...

  6. c语言用指针两个字母交换,c语言指针基础之用指针交换两个数(代码实例)

    用指针交换两个数: void swap(int *p,int *q) { int temp; temp = *p; *p = *q; *q = temp; } int main() { int a = ...

  7. C语言拆分一个三位数。以及交换两个数(常规法复习加指针法学习)

    给一个三位数,要求拆分出百位十位,个位.然后输出. 以前我们在水仙花那次求水仙花数 提到过经典的取法 我们再次展示一下: #include<stdio.h> int main() {int ...

  8. 【java】java 如何不使用第三个变量来交换两个数的值

    文章目录 1.概述 2.方案 2.1 算术运算 2.2 位运算 1.概述 今天是一个悲伤的一天,我的悲伤逆流成河.非常非常的悲伤.主要是有这个一个面试题.如何不使用第三个变量来交换两个数的值. 考官说 ...

  9. 详解交换两个数的五种思路

    目录 •写在前面 •利用新变量 •利用加减法 •利用乘除法 •利用异或 •利用移位 •写在前面 交换两个数?听起来这不是很简单嘛,感觉没什么好讲的.不过这么想是因为很多时候都想简单了,没有把编程的巧妙 ...

最新文章

  1. 一堆棋子java代码编程_网易2018校招内推编程题-堆棋子-C++实现
  2. 分析USB平台设备模型框架(1)
  3. 中国计算机学会CCF推荐国际学术会议和期刊目录-软件工程/系统软件/程序设计语言
  4. 判断程序是否通过RFC运行
  5. DDG全家桶之3022
  6. 数据挖掘肿瘤预测_科研套路不嫌多,数据挖掘发3分
  7. 西安交大计算机技术考研初复试,西安交大计算机考研初试、复试信息
  8. 基于FPGA的RGB图像转 Ycbcr图像实现 gray图像
  9. arm体系结构与编程_ARM体系结构基础(1)
  10. java jackson 自定义_java – 自定义jackson解组行为
  11. java 线程修改数据库连接_如何强制Java线程关闭线程本地数据库连接
  12. 中国大学mooc 慕课 管理信息系统(同济大学) 第八章 电子商务 第九章 信息系统规划 习题 测试答案
  13. Coupled Layer-wise Graph Convolution for Transportation Demand Prediction
  14. 了解C语言中的exec函数家族
  15. java 通过onvif抓取海康摄像头图片
  16. Unity的lookRotation和lookAt的区别理解,是什么意思。
  17. BZOJ4622 [NOI 2003] 智破连环阵
  18. 学习进度2012-6-26(动态规划算法、Prim算法、Dijkstra算法)
  19. window.open打开新标签页面
  20. 2022年终几段晋升、述职等汇报文案参考

热门文章

  1. Redis分布式锁 Spring Schedule实现任务调度
  2. 在Jmeter中使用Selenium WebDriver完成测试
  3. Laravel/Lumen搭建服务器性能测试
  4. linux密码修改实验
  5. fedora8完美DNS教程
  6. Python的库和资源
  7. ----==《在路上》==----
  8. 关于for循环与setTimeout的延迟
  9. 香港居民换领新智能身份证 市民对办理过程表满意
  10. Swift 4.2正式发布