2013-06-30 3 views
-4

나는 잠재적 에너지의 변화를 계산하는 복잡한 프로그램을 작성 중입니다 (ΔPE = mgΔh).두 개의 변수 값을 교환하는 방법은 무엇입니까?

결국, if 문에 sH> fH이면 해당 값이 서로 바뀝니다. 어떤 개념을 적용해야합니까?

+2

꽤 사소한 : 세 번째 변수를 사용하십시오. 여기에는 개념이 없습니다. –

+0

'double ch = Math.Abs ​​(fH - sH); – Ryan

+0

중복 가능 [임시 변수를 사용하지 않고 두 변수를 교체] (http://stackoverflow.com/questions/804706/swap-two-variables-without- 임시 변수 사용) –

답변

0

일시적인 제 3 변수를 사용하여 스와핑을 수행 할 수 있습니다. sH를 임시 변수에 저장하고 sH를 fH에 지정하십시오. 이렇게하면 sH의 값이 캐시되고 재 할당 할 때 손실되지 않습니다. 마지막으로, fH를 temp에 할당하십시오. 이제 값이 스와핑됩니다.

희망이

1

스토어 변수 임시의 변수 중 하나 다음 그들을 교환 :

if (sH > fH) { 
    var temp = sH; 
    sh = fH; 
    fH = temp; 
} 
0

어 작업 ... TMP 변수에 복사, B에 tmp를 복사하는에 B를 복사? 당신이 강력한 파싱을 다루고 있기 때문에, 나는 xor-swap (안전하지 않은 정수 처리를 통한)과 같은 미친 것이 보증 될 것임을 알 수 없다.

1

이 일을하는 이유를 가정 할 수 있습니다 ch 여기에 부정적인되지 않도록 :

double ch = fH - sH; 

그냥 절대 값을 얻을 :

double ch = Math.Abs(fH - sH); 
-2

이 시도를, 그러나 이것은 임시 변수를 사용하는 것만큼 빠르지 않습니다.

if (sH > fH) 
{ 
    sH -= fH; 
    fH += sH; 
    sH = fH - sH; 
} 
1

사용 :

static void Main(string[] args) 
{ 
    Console.WriteLine("please imput number 1 "); 
    int a = Convert.ToInt32(Console.ReadLine()); 
    Console.WriteLine("please imput number 2 "); 
    int b = Convert.ToInt32(Console.ReadLine()); 

    if (a > b) 
    { 
     int temp1 = a; 
     int temp2 = b; 
     b = temp1; 
     a = temp2; 
    } 
} 
1

가 SH 및 SF의 값을 바꿔 :

SH = Interlocked.Exchange (REF SF, SH);를 연동

클래스 하여 System.Threading 네임 스페이스에 선언되어있다.

변수를 한 줄로 바꿀 수 있습니다. 스왑은 원자 적이며 스레드로부터 안전합니다.

성능 측면에서 볼 때 임시 변수를 사용하는 스왑보다 조금 느립니다. 그것은 여전히 ​​빠른 조명입니다. 나노 수준에서 극한 최적화를하지 않는 한 걱정할 필요가 없습니다.

관련 문제