網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
在學(xué)習(xí).Net/C#或者任何一門(mén)面向?qū)ο笳Z(yǔ)言的初期,大家都寫(xiě)過(guò)交換兩個(gè)變量值,通常是通過(guò)臨時(shí)變量來(lái)實(shí)現(xiàn)。本篇使用多種方式實(shí)現(xiàn)兩個(gè)變量值的交換。
假設(shè)int x =1; int y = 2;現(xiàn)在交換兩個(gè)變量的值。
使用臨時(shí)變量實(shí)現(xiàn)
static void Main(string[] args)
{
int x = 1;
int y = 2;
Console.WriteLine("x={0},y={1}",x, y);
int temp = x;
x = y;
y = temp;
Console.WriteLine("x={0},y={1}", x, y);
Console.ReadKey();
}
使用加減法實(shí)現(xiàn)
試想, 1+2=3,我們得到了兩數(shù)相加的結(jié)果3。3-2=1,把1賦值給y,y就等于1; 3-1=2,把2賦值給x,這就完成了交換。
static void Main(string[] args)
{
int x = 1;
int y = 2;
Console.WriteLine("x={0},y={1}",x, y);
x = x + y; //x = 3
y = x - y; //y = 1
x = x - y; //x = 2
Console.WriteLine("x={0},y={1}", x, y);
Console.ReadKey();
}
使用ref和泛型方法實(shí)現(xiàn)
如果把交換int類(lèi)型變量值的算法封裝到方法中,需要用到ref關(guān)鍵字。
static void Main(string[] args)
{
int x = 1;
int y = 2;
Console.WriteLine("x={0},y={1}",x, y);
Swap(ref x, ref y);
Console.WriteLine("x={0},y={1}", x, y);
Console.ReadKey();
}
static void Swap(ref int x, ref int y)
{
int temp = x;
x = y;
y = x;
}
如果交換string類(lèi)型的變量值,就要寫(xiě)一個(gè)Swap方法的重載,讓其接收string類(lèi)型:
static void Main(string[] args)
{
string x = "hello";
string y = "world";
Console.WriteLine("x={0},y={1}",x, y);
Swap(ref x, ref y);
Console.WriteLine("x={0},y={1}", x, y);
Console.ReadKey();
}
static void Swap(ref int x, ref int y)
{
int temp = x;
x = y;
y = x;
}
static void Swap(ref string x, ref string y)
{
string temp = x;
x = y;
y = x;
}
如果交換其它類(lèi)型的變量值呢?我們很容易想到通過(guò)泛型方法來(lái)實(shí)現(xiàn),再寫(xiě)一個(gè)泛型重載。
static void Main(string[] args)
{
string x = "hello";
string y = "world";
Console.WriteLine("x={0},y={1}",x, y);
Swap<string>(ref x, ref y);
Console.WriteLine("x={0},y={1}", x, y);
Console.ReadKey();
}
static void Swap(ref int x, ref int y)
{
int temp = x;
x = y;
y = x;
}
static void Swap(ref string x, ref string y)
{
string temp = x;
x = y;
y = x;
}
static void Swap<T>(ref T x, ref T y)
{
T temp = x;
x = y;
y = temp;
}
使用按位異或運(yùn)算符實(shí)現(xiàn)
對(duì)于二進(jìn)制數(shù)字來(lái)說(shuō),當(dāng)兩個(gè)數(shù)相異的時(shí)候就為1, 即0和1異或的結(jié)果是1, 0和0,以及1和1異或的結(jié)果是0。關(guān)于異或等位運(yùn)算符的介紹在這里:https://www.jb51.net/article/260847.htm
舉例,把十進(jìn)制的3和4轉(zhuǎn)換成16位二進(jìn)制分別是:
x = 0000000000000011;//對(duì)應(yīng)十進(jìn)制數(shù)字3
y = 0000000000000100; //對(duì)應(yīng)十進(jìn)制數(shù)字4
把x和y異或的結(jié)果賦值給x:x = x ^ y;
x = 0000000000000111;
把y和現(xiàn)在的x異或,結(jié)果賦值給y:y = y ^ x
y = 0000000000000011;
把現(xiàn)在的x和現(xiàn)在的y異或,結(jié)果賦值給x:x = x ^ y
x = 0000000000000100;
按照上面的算法,可以寫(xiě)成如下:
static void Main(string[] args)
{
int x = 1;
int y = 2;
Console.WriteLine("x={0},y={1}",x, y);
x = x ^ y;
y = y ^ x;
x = x ^ y;
Console.WriteLine("x={0},y={1}", x, y);
Console.ReadKey();
}
原文鏈接:https://www.cnblogs.com/darrenji/p/4464799.html
相關(guān)推薦
- 2022-05-18 Python實(shí)現(xiàn)批量自動(dòng)整理文件_python
- 2022-02-18 yml配置文件中存在@無(wú)法識(shí)別,報(bào)錯(cuò):found character ‘@‘ that cannot
- 2023-04-01 react組件實(shí)例屬性state詳解_React
- 2022-10-29 umi pro-layout : 某個(gè)頁(yè)面 禁用/移除 pro-layout ( 比如: 登錄頁(yè)不需
- 2022-05-18 C++?qt實(shí)現(xiàn)打開(kāi)關(guān)閉狀態(tài)按鈕的代碼_C 語(yǔ)言
- 2022-06-02 Python進(jìn)程池基本概念_python
- 2022-03-15 const定義簡(jiǎn)單數(shù)據(jù)類(lèi)型修改會(huì)報(bào)錯(cuò),而復(fù)雜數(shù)據(jù)類(lèi)型則不會(huì)
- 2022-11-19 詳解C語(yǔ)言?xún)?nèi)核中的鏈表與結(jié)構(gòu)體_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支