C#交換兩個(gè)變量值的幾種方法總結(jié)
在學(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)算符的介紹在這里:http://www.fzitv.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();
}以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Unity實(shí)現(xiàn)物體跟隨鼠標(biāo)移動(dòng)
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)物體跟隨鼠標(biāo)移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
FileShare枚舉的使用小結(jié)(文件讀寫(xiě)鎖)
其實(shí)/FileShare就是控制文件流的“訪(fǎng)問(wèn)權(quán)限”,當(dāng)然,這僅僅是入門(mén)的文件操作,自己做了筆記,也希望能給大家?guī)?lái)幫助2014-01-01
c#中WinForm用OpencvSharp實(shí)現(xiàn)ROI區(qū)域提取的示例
已經(jīng)自學(xué)OpencvSharp一段時(shí)間了,現(xiàn)在就分享一下我的學(xué)習(xí)過(guò)程,本文主要介紹了c#中WinForm用OpencvSharp實(shí)現(xiàn)ROI區(qū)域提取的示例,具有一定的參考價(jià)值,感興趣的可以了解一下2022-05-05
C#實(shí)現(xiàn)查殺本地與遠(yuǎn)程進(jìn)程的方法
這篇文章主要介紹了C#實(shí)現(xiàn)查殺本地與遠(yuǎn)程進(jìn)程的方法,可實(shí)現(xiàn)針對(duì)特定進(jìn)程的關(guān)閉操作,是C#進(jìn)程操作的一個(gè)典型應(yīng)用,需要的朋友可以參考下2014-12-12

