2014-10-10 45 views
0

如何交換2點的整數,而無需使用第三可變的,使得它適用於整數的所有範圍。 我知道我們通常會遵循以下邏輯。交換兩個整數,而無需使用第三可變所有範圍的整數的值

 int a, b; 

     a = 10; 
     b = 30; 
     a = a + b; 
     b = a - b; 
     a = a - b; 

但是,如果(a + b)給出的值大於整數範圍,則此邏輯將失敗。 還有其他邏輯嗎?

+0

你可能要參考這個帖子: http://stackoverflow.com/questions/26274628/how-do-you -swap-兩整數值,而無需-使用-TEMP-可變 – Hatjhie 2014-10-10 02:03:59

回答

2

我相信你正在尋找的XOR swap

if (a != b) { 
    a ^= b; 
    b ^= a; 
    a ^= b; 
} 
1

您可以使用XOR ...

x ^= y; 
y ^= x; 
x ^= y; 

Source了一個方便的現場演示。

1
int a=10; 
int b=20; 

a=a^b; 
b=a^b; 
a=a^b; 
Console.WriteLine(a); 
Console.WriteLine(b);