C#交換兩個(gè)變量值的幾種方法總結(jié)
在學(xué)習(xí).Net/C#或者任何一門面向?qū)ο笳Z言的初期,大家都寫過交換兩個(gè)變量值,通常是通過臨時(shí)變量來實(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類型變量值的算法封裝到方法中,需要用到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類型的變量值,就要寫一個(gè)Swap方法的重載,讓其接收string類型:
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;
}如果交換其它類型的變量值呢?我們很容易想到通過泛型方法來實(shí)現(xiàn),再寫一個(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)
對于二進(jìn)制數(shù)字來說,當(dāng)兩個(gè)數(shù)相異的時(shí)候就為1, 即0和1異或的結(jié)果是1, 0和0,以及1和1異或的結(jié)果是0。關(guān)于異或等位運(yùn)算符的介紹在這里:http://www.dhdzp.com/article/260847.htm
舉例,把十進(jìn)制的3和4轉(zhuǎn)換成16位二進(jìn)制分別是:
x = 0000000000000011;//對應(yīng)十進(jìn)制數(shù)字3
y = 0000000000000100; //對應(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;
按照上面的算法,可以寫成如下:
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();
}以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(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
其實(shí)/FileShare就是控制文件流的“訪問權(quán)限”,當(dāng)然,這僅僅是入門的文件操作,自己做了筆記,也希望能給大家?guī)韼椭?/div> 2014-01-01
c#中WinForm用OpencvSharp實(shí)現(xiàn)ROI區(qū)域提取的示例
已經(jīng)自學(xué)OpencvSharp一段時(shí)間了,現(xiàn)在就分享一下我的學(xué)習(xí)過程,本文主要介紹了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)針對特定進(jìn)程的關(guān)閉操作,是C#進(jìn)程操作的一個(gè)典型應(yīng)用,需要的朋友可以參考下2014-12-12最新評論

