Большой Воронежский Форум
Страница 1 из 2
1 2 >
» Программирование>Поменять местами значения двух переменных
fishca 17:43 24.05.2007
Необходимо поменять местами значения двух переменных, не используя третью переменную.
Умные головы подскажите решение, плиз! [Ответ]
MAlVik 17:50 24.05.2007
Какой язык? Через указатели пробовал? [Ответ]
fishca 17:53 24.05.2007
Надо без использования указателей Язык любой. [Ответ]
HepB 17:55 24.05.2007
a:=5
b:=3
a:=a+b //8
b:=a-b //5
a:=a-b //3 [Ответ]
Dr.PC 17:56 24.05.2007
на питоне:
a,b = b,a

на всяких попсовых языках это делается так:
a:= a+b;
b:= b-a;
a:=a+b;
b:=-b;

Но тут вазможны варианты с выходом за область лопустимых значений, поэтому лучше использовать оператор XOR вместо +-.
как сделать с xor - сам подумай. [Ответ]
fishca 17:56 24.05.2007
Правильно что не куришь HepB, быстро сообразил! Спасибо! [Ответ]
Dr.PC 17:58 24.05.2007
во.. нерв даже короче написал [Ответ]
HepB 18:02 24.05.2007
хз...вроде в 9 классе исч0 прошли... [Ответ]
Dr.PC 18:03 24.05.2007
a= a^b
b= b^a
a= a^b

так вроде.. если не туплю... (^ оператор исключающего или) [Ответ]
HepB 18:11 24.05.2007
Dr.PC, уйсе, эт ч0 за языг?! [Ответ]
Dr.PC 18:11 24.05.2007

Сообщение от HepB:
Dr.PC, уйсе, эт ч0 за языг?!

Какой именно? Питон? [Ответ]
HepB 18:20 24.05.2007

Сообщение от Dr.PC:
a= a^b
b= b^a
a= a^b

я тогда не понимаю, как тут работает исключающее или... [Ответ]
Dr.PC 18:24 24.05.2007
операция побитовая:
если биты операндов одинаковые, то результирующий бит - 0, если биты разные - то 1. [Ответ]
HepB 18:33 24.05.2007
Ну опиши каждый шаг для произвольных чисел [Ответ]
Dr.PC 18:40 24.05.2007
a b
100111 010110 начальные числа
110001 010110 a= a^b
110001 100111 b= b^a
010110 100111 a= a^b [Ответ]
fishca 19:58 24.05.2007
Настояшые программисты! сначала надо потом , а потом : [Ответ]
X0R 22:00 24.05.2007

Сообщение от :
Надо без использования указателей Язык любой

Ну раз язык любой, то вот


mov eax, a
push eax
mov eax, b
mov a, eax
pop eax
mov b, eax
[Ответ]
Dr.PC 22:17 24.05.2007
mov eax, a
mov ebx, b
mov a, ebx
mov b, eax

зачем стэк дёргать? [Ответ]
G.O.D. 22:24 24.05.2007
монстры! [Ответ]
X0R 00:19 25.05.2007
mov eax, a
xchg eax, b
mov a, eax

И в самом деле нах стек дергать...
3 команды нах! [Ответ]
alex_bas 13:39 25.05.2007
на С#

using System;

class Program
{
static void Main()
{
int i = 1;
int j = 2;
i = i + j;
j = i - j;
i = i - j;

}
} [Ответ]
X0R 15:07 25.05.2007
На галимом бейсике Swap(a, b) [Ответ]
Vladimix 18:27 27.05.2007
asm { xchg var1, var2 }

можно ничего в регистры не заносить [Ответ]
X0R 18:41 27.05.2007
Vladimix,
Вот выдержка из IntelManual

Сообщение от :
Instruction Description
XCHG AX,r16 Exchange r16 with AX
XCHG r16,AXExchange AX with r16
XCHG EAX,r32 Exchange r32 with EAX
XCHG r32,EAXExchange EAX with r32
XCHG r/m8,r8 Exchange r8 (byte register) with byte from r/m8
XCHG r8,r/m8 Exchange byte from r/m8 with r8 (byte register)
XCHG r/m16,r16 Exchange r16 with word from r/m16
XCHG r16,r/m16 Exchange word from r/m16 with r16
XCHG r/m32,r32 Exchange r32 with doubleword from r/m32
XCHG r32,r/m32 Exchange doubleword from r/m32 with r32

Как видишь, как минимум один из операндов должен находиться в регистре. Я не могу вспомнить есть ли вообще команды которые в качестве двух операндов могут принимать значения в виде памяти. Я сомневаюсь что такие вообще есть... [Ответ]
Dr.PC 19:02 27.05.2007
я такого тоже не видел [Ответ]
Sb 14:44 31.05.2007
на Java:

i = (j ^= i ^= j) ^ i; [Ответ]
Dr.PC 19:20 31.05.2007
уши бы поотбивал за такой код... [Ответ]
fishca 12:14 01.06.2007
Dr.PC, чем тебе не по нраву такой код? [Ответ]
Dr.PC 12:35 01.06.2007

Сообщение от fishca:
Dr.PC, чем тебе не по нраву такой код?

тем что он хреново читается.
Нахрена мутить? Понты? [Ответ]
Vladimix 22:29 01.06.2007
Дак...конечно, понты, зачем, спрашивается, нормальному человеку понадобится менять значения переменных без участия третьей?? [Ответ]
Страница 1 из 2
1 2 >
Вверх