나는 잠재적 에너지의 변화를 계산하는 복잡한 프로그램을 작성 중입니다 (ΔPE = mgΔh).두 개의 변수 값을 교환하는 방법은 무엇입니까?
결국, if 문에 sH> fH이면 해당 값이 서로 바뀝니다. 어떤 개념을 적용해야합니까?
나는 잠재적 에너지의 변화를 계산하는 복잡한 프로그램을 작성 중입니다 (ΔPE = mgΔh).두 개의 변수 값을 교환하는 방법은 무엇입니까?
결국, if 문에 sH> fH이면 해당 값이 서로 바뀝니다. 어떤 개념을 적용해야합니까?
일시적인 제 3 변수를 사용하여 스와핑을 수행 할 수 있습니다. sH를 임시 변수에 저장하고 sH를 fH에 지정하십시오. 이렇게하면 sH의 값이 캐시되고 재 할당 할 때 손실되지 않습니다. 마지막으로, fH를 temp에 할당하십시오. 이제 값이 스와핑됩니다.
희망이
스토어 변수 임시의 변수 중 하나 다음 그들을 교환 :
if (sH > fH) {
var temp = sH;
sh = fH;
fH = temp;
}
어 작업 ... TMP 변수에 복사, B에 tmp를 복사하는에 B를 복사? 당신이 강력한 파싱을 다루고 있기 때문에, 나는 xor-swap (안전하지 않은 정수 처리를 통한)과 같은 미친 것이 보증 될 것임을 알 수 없다.
이 일을하는 이유를 가정 할 수 있습니다 ch
여기에 부정적인되지 않도록 :
double ch = fH - sH;
그냥 절대 값을 얻을 :
double ch = Math.Abs(fH - sH);
이 시도를, 그러나 이것은 임시 변수를 사용하는 것만큼 빠르지 않습니다.
if (sH > fH)
{
sH -= fH;
fH += sH;
sH = fH - sH;
}
사용 :
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;
}
}
가 SH 및 SF의 값을 바꿔 :
SH = Interlocked.Exchange (REF SF, SH);를 연동
클래스 은 하여 System.Threading 네임 스페이스에 선언되어있다.
변수를 한 줄로 바꿀 수 있습니다. 스왑은 원자 적이며 스레드로부터 안전합니다.
성능 측면에서 볼 때 임시 변수를 사용하는 스왑보다 조금 느립니다. 그것은 여전히 빠른 조명입니다. 나노 수준에서 극한 최적화를하지 않는 한 걱정할 필요가 없습니다.
꽤 사소한 : 세 번째 변수를 사용하십시오. 여기에는 개념이 없습니다. –
'double ch = Math.Abs (fH - sH); – Ryan
중복 가능 [임시 변수를 사용하지 않고 두 변수를 교체] (http://stackoverflow.com/questions/804706/swap-two-variables-without- 임시 변수 사용) –