用异或运算交换两个整数实现swap函数功能
对于异或运算有这如下说明:
1^1=0
0^0=0
1^0=1
0^1=1
简单理解就是当两个书相同时结果为0,而两个数不同时异或的结果为1
可用于两个整数的交换,而不用去引入一个中间变量
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
a=a^b;
b=b^a;
a=a^b;
cout<<a<<" "<<b<<endl;
return 0;
}
具体我也不明白异或运算为什么会达到交换整数的作用,我也比较想知道异或运算和引入第三个变量交换整数那个效率高?
欢迎大佬指导————QQ656484427
PS:异或运算不是一种好的代码,效率可能不如申请变量高。
根据资料总结为下
1. 这个所谓的“技巧”在现代的机器上只会更慢(我甚至怀疑它从来就不可能比原始办法快)。原始办法是两次内存读和写,这个"技巧"是六读三写加三次异或(或许编译器可以优化成两读三写加三次异或)。
2. 同样也不能节省内存,因为中间变量 tmp 通常会是寄存器(稍后有汇编代码供分析)。就算它在函数的局部堆栈(stack)上,反正栈已经开在那儿了,也没有进一步的函数调用,根本节约不了一丁点内存。
3. 相反,由于计算步骤较多,会使用更多的指令,编译后的机器码长度会增加。
用异或运算交换两个整数实现swap函数功能的更多相关文章
- 黑马程序员-- C语言交换两个整数变量值几种函数比较
总结了C语言中几种交换两个整数数值的函数,欢迎交流 #include <stdio.h> 使用多种交换变量值的函数比较 方法一:使用第三方临时变量 这种函数a,b只是值传递,实质上不能修交 ...
- 面试题:如何在不使用临时变量temp的情况下交换两个整数的值?
利用一个小技巧,一个整数a在异或另一个整数b两次以后所得的值还是整数a. 具体的过程我们可以自己找两个整数以二进制的形式自己在纸上画一下他们的异或过程.(异或的运算符号为"^") ...
- c语言-交换两个整数
使用c来写一个函数来实现交换两个整数. 第一种 一般的方法,引用中间变量,方便快捷. void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = t ...
- C、C++、Java异或运算交换变量变量值的区别
今天看到一位大神的博客,深受感触.决定也发一篇博客,证明一下我还活着. 于是我翻看以前学习时做的一些笔记,整理了一下,得到了一个关于异或运算交换变量变量值的笔记. 首先来看下面三组表达式,看起来他们都 ...
- PTA 面向对象程序设计 6-1 引用作函数形参交换两个整数
引用作函数形参交换两个整数 设计一个void类型的函数Swap,该函数有两个引用类型的参数,函数功能为实现两个整数交换的操作. 裁判测试程序样例: #include <iostream> ...
- 用swap函数交换两个整数
#include<stdio.h> //头文件 main() //主函数 { void swap(int *p,int *q); //声明 int a,b; //定义两个整数 int *p ...
- 一个BUG?Visual Studio 2017 C++编写交换两个整数
想用一句话搞定交换: int a = 2, b = 5; cout << "a = " << a << ", b = " & ...
- c++作业:输入两个整数,用函数求两数之和。函数外部声明有什么作用?
#include <iostream> using namespace std; int main(){ //求两数的和? int a,b,s; cout<<"请你输 ...
- c++ 交换两个容器(swap)
#include <iostream> #include <vector> using namespace std; int main () { vector<,); / ...
随机推荐
- java在Win7 64位 获取客户端的IP,MAC,计算机名
package com.javaweb.util; import java.io.IOException; import java.io.InputStreamReader; import java. ...
- springmvc 注解式开发 接收请求参数
1.校正请求参数名: 2.以对象形式整体接收 3.路径变量:
- JAVA基础知识总结9(特殊类)
1.Object: 所有类的直接或者间接父类,Java认为所有的对象都具备一些基本的共性内容,这些内容可以不断的向上抽取,最终就抽取到了一个最顶层的类中的,该类中定义的就是所有对象都具备的功能. 具体 ...
- 框架之 hibernate之各种查询
1. Hibernate的查询方式 2. Hibernate的查询策略 案例:使用Hibernate完成查询所有联系人功能 需求分析 1. 完成所有的联系人的查询 技术分析之Hibernate框架的查 ...
- ServerSocket的建立和使用
-------------siwuxie095 工程名:TestMyServerSocket 包名:com.siwuxie095.socket 类名:MyServerSocket.java 工程结构目 ...
- sequelize 用于PostgreSQL,MySQL,SQLite和MSSQL的Node.js / io.js ORM
安装 Sequelize可通过NPM获得. $ npm install --save sequelize # And one of the following: $ npm install --sav ...
- String/StringBuilder 类 判断QQ号码
1.1. 训练描述:[方法.String类] 一.需求说明:请用户输入一个“QQ号码”,我们来判断这个QQ号码是否正确. 要求:使用方法来完成判断功能. 1.2. 操作步骤描述 建立MainApp类 ...
- p2421 荒岛野人
传送门 题目 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走 ...
- 李兴华Java培训系列课程
理解程序设计分层的思想: Dao设计模式的组成以及各部分的开发: 3.具体内容 在本次讲解之中,处理IO的部分暂时不会使用到之外,所有Java的重点的核心部分都会涉及到. 实际上在任何的环境下分层的概 ...
- spark 1.5的hivecontext的问题
spark升级到1.5,里面的hive版本升级到1.2.1版本,我写了如下的代码 object SQLApp extends App{ val sparkconf = new SparkConf(). ...