交换2个数值的方法
如何交換2個(gè)變量的值?一般來(lái)說(shuō),想到的方法是再找一個(gè)臨時(shí)變量,通過(guò)一種順序存放的方式來(lái)達(dá)到交換值的效果。 比如有a,b這2個(gè)變量。取同類型的變量temp。
temp = a ; a = b ; b = temp ; 這樣就完成了交換。
但這樣做的話會(huì)多使用一個(gè)temp的內(nèi)存。如果沒(méi)有溢出的問(wèn)題,可以嘗試加減法。 a = a + b ; b = a - b ; a = a - b ; 換成數(shù)學(xué)運(yùn)算來(lái)表示,a1 = a + b ; b1 = a1 - b = a + b - b = a ; a = a1 - b1 = a + b - a = b ; 完成整個(gè)運(yùn)算無(wú)需temp。
還有一種方法,使用異或運(yùn)算。 2個(gè)變量a和b。方法如下: a = a^b ; ?b = ?b^a ; a = a^b ; 交換的過(guò)程: a1 = a^b ;? b1 = b^a1 = b^a^b = a ;? a1 = a1^b1 = a^b^a = b ; 這里的b1與a1就是我們想要的。
/*----------------------- 關(guān)于異或運(yùn)算 ---------------------*/ 異或,相同為0,不同為1 。? 真值表:
根據(jù)真值表我們可以得到:a^a = 0 ; b^0 = b ; 假設(shè)t = 0011 ;那么 t^0000 = 0011 ^ 0000 = 0011 ; t^1111 = 0011 ^ 1111 = 1100 ;
temp = a ; a = b ; b = temp ; 這樣就完成了交換。
但這樣做的話會(huì)多使用一個(gè)temp的內(nèi)存。如果沒(méi)有溢出的問(wèn)題,可以嘗試加減法。 a = a + b ; b = a - b ; a = a - b ; 換成數(shù)學(xué)運(yùn)算來(lái)表示,a1 = a + b ; b1 = a1 - b = a + b - b = a ; a = a1 - b1 = a + b - a = b ; 完成整個(gè)運(yùn)算無(wú)需temp。
還有一種方法,使用異或運(yùn)算。 2個(gè)變量a和b。方法如下: a = a^b ; ?b = ?b^a ; a = a^b ; 交換的過(guò)程: a1 = a^b ;? b1 = b^a1 = b^a^b = a ;? a1 = a1^b1 = a^b^a = b ; 這里的b1與a1就是我們想要的。
/*----------------------- 關(guān)于異或運(yùn)算 ---------------------*/ 異或,相同為0,不同為1 。? 真值表:
| a^b | 0 | 1 |
| 0 | 0 | 1 |
| 1 | 1 | 0 |
總結(jié)
- 上一篇: FPGA病房呼叫系统实现
- 下一篇: 基于FPGA的竞赛抢答器