Большой Воронежский Форум
Страница 2 из 2
< 12
» Программирование>Поменять местами значения двух переменных
doXtor 23:11 01.06.2007
на TigerSHARC 201(202) если размер переменной 16 бит

.var a;
.var b;

j0 = a;;
r1:0 = l[j0+=2];;
r1 = r0;;
r0 = lshift r0 by 16;;
r2 = 0xFFFF;;
r1 = r1 and r2;;
r0 = r1 + r0;;
j0 = a;;
[j0+j31] = r0;;

[Ответ]
Dr.PC 23:47 01.06.2007
о ужас...
А что так длинно? [Ответ]
alemiks 00:54 02.06.2007
на php
list($a, $b) = array($b, $a); [Ответ]
mikе 03:25 02.06.2007
alemiks, +1 [Ответ]
Dr.PC 14:18 02.06.2007

Сообщение от alemiks:
на php

на Питоне веселей.. [Ответ]
The_God 19:40 04.09.2007
на lua тоже
a,b = b,a [Ответ]
imago^ 23:07 04.09.2007
попонтовались =))) [Ответ]
=]СтепаныЧ[= 15:02 10.09.2007
a := a xor b;
b := a xor b;
a := a xor b; [Ответ]
DJ Anarchist 15:23 10.09.2007
=]СтепаныЧ[=, читай внимательнее...

Сообщение от Dr.PC 24.05.2007, 19:03:
a= a^b
b= b^a
a= a^b
так вроде.. если не туплю... (^ оператор исключающего или)

[Ответ]
Legos 16:40 10.09.2007

Сообщение от Vladimix:
Дак...конечно, понты, зачем, спрашивается, нормальному человеку понадобится менять значения переменных без участия третьей??

Это используется в программировании в случае приоритетности экономии памяти, а не быстроты работы программы. [Ответ]
Dr.PC 21:18 12.09.2007
с трудом представляю себе ситуацию, когда нельзя выделить пару байт... [Ответ]
RJ Presto 18:00 17.09.2007
при кодинге под смартфоны - легко [Ответ]
DJ Anarchist 18:02 17.09.2007
RJ Presto, смарты вряд ли, а вот под простые мобилы - да... в смартах все же есть поддержка карт памяти... [Ответ]
The_God 18:02 17.09.2007
это неправильное решение:

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

для целочисленных переменных может возникнуть переполнение при математических вычислениях.
для целочисленных переменных нужно использовать xor:

Сообщение от =:
СтепаныЧ[=]a := a xor b;
b := a xor b;
a := a xor b;

[Ответ]
RJ Presto 18:03 17.09.2007

Сообщение от DJ Anarchist:
RJ Presto, смарты вряд ли, а вот под простые мобилы - да... в смартах все же есть поддержка карт памяти...

тока вот код при выполнении размещается в опреативной памяти [Ответ]
Dr.PC 18:51 17.09.2007

Сообщение от The_God:
то неправильное решение:
Цитата:
Сообщение от Dr.PC
на всяких попсовых языках это делается так:
a:= a+b;
b:= b-a;
a:=a+b;
b:=-b;
для целочисленных переменных может возникнуть переполнение при математических вычислениях.
для целочисленных переменных нужно использовать xor:
Цитата:
Сообщение от =
СтепаныЧ[=]a := a xor b;
b := a xor b;
a := a xor b;

Да ты чё? А я не тоже самое написал в том же посте, который ты процитировал?

Сообщение от RJ Presto:
при кодинге под смартфоны - легко

я ору.. уже сто лет как такие ситуации даже при кодинге под самые замухрыжные контроллеры не возникают. А уж в смартфоне или телефоне, где уже давно и окна, и игры и всякие прибамбасы не суметь ВРЕМЕННО выделить пару байт для одной операции надо суметь. [Ответ]
Dr.PC 18:55 17.09.2007

Сообщение от RJ Presto:
тока вот код при выполнении размещается в опреативной памяти

ага, причём не только данные, но и команды. посчитаем, сколько места ПОСТОЯННО занимает код по переброске двух переменных и сколько места ВРЕМЕННО (на одну операцию всего лишь) сэкономится?
Эффект может быть только в контроллерах с раздельной памятью команд и оперативкой, но он такой мизерный, что это даже смешно. [Ответ]
RJ Presto 19:08 17.09.2007

Сообщение от Dr.PC:
ага, причём не только данные, но и команды. посчитаем, сколько места ПОСТОЯННО занимает код по переброске двух переменных и сколько места ВРЕМЕННО (на одну операцию всего лишь) сэкономится?
Эффект может быть только в контроллерах с раздельной памятью команд и оперативкой, но он такой мизерный, что это даже смешно.

почему же тогда бывают ситуации, когда даже на указатель памяти не хватает? [Ответ]
Dr.PC 19:20 17.09.2007

Сообщение от RJ Presto:
почему же тогда бывают ситуации, когда даже на указатель памяти не хватает?

ужс... Не потому ли, что не тот телефон для программы выбрали? [Ответ]
The_God 19:48 17.09.2007

Сообщение от Dr.PC:
А я не тоже самое написал в том же посте, который ты процитировал?

не тоже самое зависит от платформы, может работать, а может и нет.

зы. учи матчасть

ps уточню что я говорю про с++, в нём эти два куска кода не эквивалентны обмену через третью переменную, тут все зависит от того какие числа мы меняем местами, хор подойдет для целых и дробных чисел ( и то если их физически привести к целым, а потом обратно ),
а математические манипуляции с целыми числами могут дать в результате переполнение, результат которого будет зависеть от типа процессора на котором этот код потом будет выполняться,
например если так переставлять местами значения в ММХ регистрах то получится совсем не то что хочется
т.к. там есть не только циклическое переполнение в котором данный способ прокатил-бы, но и переполнение насыщением, это когда результат если не помещает в переменную то ей присваивается максимально возможное значение ( ну или минимально, если результат отрицательный ). [Ответ]
Dr.PC 19:52 17.09.2007

Сообщение от Dr.PC:
Но тут вазможны варианты с выходом за область лопустимых значений, поэтому лучше использовать оператор XOR вместо +-.

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

так вроде.. если не туплю... (^ оператор исключающего или)

Может не мне учить надо? [Ответ]
The_God 20:05 17.09.2007
прасти, не заметил [Ответ]
RJ Presto 21:02 17.09.2007

Сообщение от Dr.PC:
ужс... Не потому ли, что не тот телефон для программы выбрали?

то есть по-твоему проверку на то, создался ли указатель, делаюбт от дури? [Ответ]
Dr.PC 21:01 18.09.2007

Сообщение от RJ Presto:
то есть по-твоему проверку на то, создался ли указатель, делаюбт от дури?

нет, на всякий случай. Потому что может быть запущено куча приложений, которые выжрали всю память (да и мало-ли что может случится). А проверку делают не на то, создался ли указатель, а на то, выделился ли кусок памяти, на который этот указатель должен указывать. А то я могу попросить выделить 3 Гб памяти под массив. И тогда мне система болт отпишет. Или мы про разное говорим? Приведи код. [Ответ]
RJ Presto 21:19 18.09.2007

Сообщение от Dr.PC:
А проверку делают не на то, создался ли указатель, а на то, выделился ли кусок памяти, на который этот указатель должен указывать. А то я могу попросить выделить 3 Гб памяти под массив. И тогда мне система болт отпишет. Или мы про разное говорим? Приведи код.

код не покажу - нет его, а писался полгода назад, под симбман.
да, выделение памяти очевидно и проверялось... [Ответ]
Dr.PC 21:36 18.09.2007
это две большие разницы. [Ответ]
The_God 04:05 19.09.2007
все регистры не выжрут через них можно поменять [Ответ]
Dr.PC 09:45 19.09.2007
во-во.. хотя бы так.
Хотя у меня была одно время мания всё программу писать в регистрах, стараясь совершенно не использовать оперативку (наверное это болезнь всех начинающих) - у меня тогда вечно регистров не хватало. Тем более писал под персоналку, а у неё регистров маловато. [Ответ]
Страница 2 из 2
< 12
Вверх