C#开发笔记之07-如何实现交换2个变量的值而不引入中间变量?
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/963 访问。
这里给出常见的7种方法,仅供大家参考,部分实现C#不支持。
1、加减减法
private static void Swap1(ref int a, ref int b) {
a = a + b;
b = a - b;
a = a - b;
}
2、减减加法
private static void Swap2(ref int a, ref int b) {
a = b - a;
b = b - a;
a = b + a;
}
3、加减赋值法
private static void Swap3(ref int a, ref int b) {
//C#不支持此方法,C或C++可以
//a = a + b - (a = b);
}
4、加减减赋值法
private static void Swap4(ref int a, ref int b) {
//C#不支持逗号表达式,C或C++可以
//a = (a = a + b, b = a - b, a - b);
}
5、异或法
private static void Swap5(ref int a, ref int b) {
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
6、汇编法
__asm
{
mov eax,a;
mov ecx,b;
push dword ptr[eax];
push dword ptr[ecx];
pop dword ptr[eax];
pop dword ptr[ecx];
}
7、加乘赋值法
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/963 访问。
private static void Swap7(ref int a, ref int b) {
b = a + 0 * (a = b);
}
请注意:方法3、4、6,C#语言不支持。
C#开发笔记之07-如何实现交换2个变量的值而不引入中间变量?的更多相关文章
- python学习笔记(八)函数return多个值,列表推导式和交换两个变量的值
函数return多个值: 补充知识点:写代码得到时候少用全局变量: 1.不安全 2.会一直占着内存不释放 函数多个return值,那么会把这几个return的值都放在一个元组里面,然后返回 def h ...
- python不使用第三方变量,交换两个变量的值
#不使用第三个变量交换两个变量的值 a=1 b=2 a,b=b,a#python的直接交换 #另一种交换方法 a=a+b#a=3 b=2 b=a-b#a=3 b=1 a=a-b#a=2 b=1 pri ...
- C语言:指针实现交换两个变量的值
用指针交换两个变量的值(10分) 题目内容: 用指针交换两个变量的值 主函数参考: int main( ) { int a,b; scanf("%d%d",&a,& ...
- 【剑指offer】不使用新变量,交换两个变量的值,C++实现
# 题目 不使用新变量,交换两个变量的值. # 思路 方法一:使用加减法操作,交换两个变量的值. A = A+B B = A-B A = A-B 方法二:使用异或运算,交换两个变量的值 A = A^B ...
- PHP中不用第三个变量交换两个变量的值
相信大家在PHP面试或者学习中经常会遇到这个问题就是“不用第三个变量来交换两个变量的值”,今天正对这个问题来讨论一下: 第一种方法:首先会想到的 这种方法简单可行,顺利的交换了两个变量的值. 第二种方 ...
- PHP不用第三变量交换2个变量的值的解决方法
以前做过一道php面试题是这样的:不使用第三个变量实现交换两个变量的值.一般都是借助第三个中间变量来实现原来两个变量的值交换,但是这道题却要求不能使用中间变量,这对于初学者来说也算是一个难题了.网上找 ...
- python中如何调用函数交换两个变量的值
python中如何调用函数交换两个变量的值 所有代码来在python3.7.1版本实现 以下实例通过用户输入两个变量,并相互交换: 方法一: def swap(a,b): # 创建临时变量,并交换 ...
- JS基础语法---练习:交换两个变量的值
* JavaScript简称为JS * JavaScript是什么? * 是一门脚本语言:不需要编译,直接运行 * 是一门解释性的语言:遇到一样代码就解释一行代码 * C#语言 ...
- PHP-不涉及第三个变量交换两个变量的值
不涉及第三个变量交换两个变量的值 方法1:使用加减法 <?php $a = 1; $b = 2; $a = $a+$b; $b = $a-$b; $a = $a-$b; printf(" ...
随机推荐
- LGTB 与 序列
题目描述 LGTB 有一个长度为 N 的序列 A ,现在他想构造一个新的长度为 N 的序列 B ,使得 B 中的任意两个数都互质.并且他要使 \sum_{1\le i\le N}|A_i-B_i| 最 ...
- SpringDI四种依赖注入方式详解
文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star!搜索关注微信公众号 [码出Offer] 领取各种学习资料! LOGO SpringDI(依赖注入) 一.DI概述 De ...
- 利用宝塔和rainloop搭建咱的邮箱
需要咱准备的东东:一枚域名.服务器需根据情况开放25.110.143.465.993端口.宝塔邮局管理器.rainloop.LNMP或者LAMP. 搭建步骤: 1.安装宝塔邮局管理器: 2.设置宝塔邮 ...
- 抛出这8个问题,检验一下你到底会不会ThreadLocal,来摸个底~
0.问题 和Synchronized的区别 存储在jvm的哪个区域 真的只是当前线程可见吗 会导致内存泄漏么 为什么用Entry数组而不是Entry对象 你学习的开源框架哪些用到了ThreadLoca ...
- Git 推送到远程仓库
github:https://github.com/ 国内的:https://gitee.com/ (和Github非常相似的) 一.Http方式进行推送 右击同步,配置远端,将URL替换成远程仓库的 ...
- css属性inline-block的应用
1. 让两个块级元素处于同一行 2. 需要元素撑开边框的时候
- jenkins集群(二)(master --> slave) -- allure自动化测试报告部署
一.前提 1.环境 1)已经部署好了jenkins环境,包括jenkins的“全局工具配置”也配好了. 2.master与slave的简单的概念 1)master:jenkins部署所在的机器 2)s ...
- python3 httpConnection——post请求
#coding=utf-8 import http.clientimport urllib.parse #与服务器建立链接url = 'code.ali.cn:80' conn = http.clie ...
- 使用faker生成测试数据
需要先安装faker模块,pip install faker 导入模块中的Faker类:from faker import Faker 实例化faker = Faker() print('姓名相关') ...
- DVWA SQL 注入关卡初探
1. 判断回显 给id参数赋不同的值,发现有不同的返回信息 2. 判断参数类型 在参数后加 ' ,查看报错信息 数字型参数左右无引号,字符型参数左右有引号 4. 引号闭合与布尔类型判断 由于是字符型参 ...