????
23 отговора
1073 прегледа
????
mojete li da swapnete stoinostite na 2 promenlivi
bez da izpolzvate treta
soy un perdedor baby
bez da izpolzvate treta
soy un perdedor baby
Re: ????
#include <stdio.h>
int main( int argc, char *argv[] )
{
int a, b;
a = 10;
b = 3443;
a ^= b;
b ^= a;
a ^= b;
fprintf( stdout, "%d %d\n", a, b );
}
tirulirutatuutuu
Re: ????
evala man
ne 4e ti dreme ma mi se izdiga6 v o4ite ae sys zdrave
precaka na drugite pi4ove usiliqta ama ni6to
soy un perdedor baby
ne 4e ti dreme ma mi se izdiga6 v o4ite ae sys zdrave
precaka na drugite pi4ove usiliqta ama ni6to
soy un perdedor baby
Re: ????
Туй хубаво, ама не върши винаги работа. Ако смениш променливите да са float/double, трябва да пренаписваш кода, понеже номерът вече не минава. 
Re: ????
of coz' u can
e za double - trebe unsigned long long (gcc), ili __uint64 - ili na dwa pasa - abre jasna e ideata :)
tirulirutatuutuu
#include <stdio.h>
int main( int argc, char *argv[] )
{
float a, b;
a = 10.0;
b = 3443.0;
*(unsigned*)&a ^= *(unsigned*)&b;
*(unsigned*)&b ^= *(unsigned*)&a;
*(unsigned*)&a ^= *(unsigned*)&b;
fprintf( stdout, "%f %f\n", a, b );
}
e za double - trebe unsigned long long (gcc), ili __uint64 - ili na dwa pasa - abre jasna e ideata :)
tirulirutatuutuu
Re: ????
eto oshte edno reshenie - tamun mi doide na um w glavata... glavata... glavata...
razbira se tva puk si ima ogranichenia za tipa - teoreticheski vjarno, prakticheski - neuodbno ;)
tirulirutatuutuu
#include <stdio.h>
int main( int argc, char *argv[] )
{
float a, b;
a = 10.0;
b = 3443.0;
a = a*b;
b = a/b;
a = a/b;
fprintf( stdout, "%f %f\n", a, b );
}
razbira se tva puk si ima ogranichenia za tipa - teoreticheski vjarno, prakticheski - neuodbno ;)
tirulirutatuutuu
Re: ????
i oshte edno, bbwolf - wse pak tema s nadpis "????" e trudno razlichaema i za snaiperist ;)
za obiknownenni kartechari e dobre da se napishe "razmjana na dve promenliwi bez izpolzwane na treta" - za snajpersita mozhe i "RNDPBINT"
tirulirutatuutuu
za obiknownenni kartechari e dobre da se napishe "razmjana na dve promenliwi bez izpolzwane na treta" - za snajpersita mozhe i "RNDPBINT"
tirulirutatuutuu
Re: ????
Това си личи, че набързо си го измислил.
1. Има опасност от overflow/underflow.
2. Ако a е 0, и b става 0, вместо да се разменят.
3. Ако b е 0 се получава FP exception - зорлем делене на нула.
Предното пък не е преносимо, понеже нямаш гаранция, че на всяка архитектура sizeof(unsigned int)==sizeof(float).
Като упражнения ги бива, стига някой да не се изкуши да ги сложи в pruduction code.
1. Има опасност от overflow/underflow.
2. Ако a е 0, и b става 0, вместо да се разменят.
3. Ако b е 0 се получава FP exception - зорлем делене на нула.
Предното пък не е преносимо, понеже нямаш гаранция, че на всяка архитектура sizeof(unsigned int)==sizeof(float).
Като упражнения ги бива, стига някой да не се изкуши да ги сложи в pruduction code.
Re: ????
малко майтап от мене, дори и спазвам условието и не използвам временна променлива (поне не пряко
):
#include <algorithm>
//int a, b;
std::swap<int>(a, b);
идем из село мама ви мръсна
моята цел е гъзо да ви пръсна...
#include <algorithm>
//int a, b;
std::swap<int>(a, b);
идем из село мама ви мръсна
моята цел е гъзо да ви пръсна...
Re: ????
vjarno e... suglasen sum - winagi kogato pravja swap izpolzwam treta promenliwa.
Wuprosa po-skoro beshe za "informatika" otkolkoto za "programisti". Za 0 se setih i az - ama reshih da ostavja toj sam da se bluska - obache ti kato opititen UNIX programist me hwana naburzo, cheerz ;)
Taka de - ama edva li ima drug nachin - da se razmenjat dve promenliwi bez izpolzwaneto na treta (pa znae li chovek?)
tirulirutatuutuu
Wuprosa po-skoro beshe za "informatika" otkolkoto za "programisti". Za 0 se setih i az - ama reshih da ostavja toj sam da se bluska - obache ti kato opititen UNIX programist me hwana naburzo, cheerz ;)
Taka de - ama edva li ima drug nachin - da se razmenjat dve promenliwi bez izpolzwaneto na treta (pa znae li chovek?)
tirulirutatuutuu
Re: ????
b=(a+=b)-b;
a-=b;
pak ima opasnost ot overflow vse pak s + po maluk shans ot *
a-=b;
pak ima opasnost ot overflow vse pak s + po maluk shans ot *
Re: ????
eto oshte edin nachin, vqrno che eax moje da se broi za 3-ta promenliva :)
mov eax, a
xchg eax, b
mov a, eax
mov eax, a
xchg eax, b
mov a, eax
Re: ????
otkoga registrite pochnaha da se broiat za promenlivi
btw, ne vijdam kakvo tolkova mu se vuzhishtavash na malkia
tozi trik s xora e star kolkoto sveta..
btw, ne vijdam kakvo tolkova mu se vuzhishtavash na malkia
tozi trik s xora e star kolkoto sveta..
Re: ????
vjarno e tova.
ama tozi sus izwazhdaneto, koeto pm pokaza ne go znaeh.
tirulirutatuutuu
ama tozi sus izwazhdaneto, koeto pm pokaza ne go znaeh.
tirulirutatuutuu
Re: ????
az wse pak izpolzwam treta promenliwa - po-chetlivo, i razbiraemo e - i raboti za po-slozhni danni - klasove, strukturi i prochie. Mozhe bi dori e po-burzo - no spored men njama goljamo znachenie.
Edinstweno xor-a mozhe da e po-udoben - ako ti lipswa register.
tirulirutatuutuu
Edinstweno xor-a mozhe da e po-udoben - ako ti lipswa register.
tirulirutatuutuu
Re: ????
> az wse pak izpolzwam treta promenliwa - po-chetlivo, i razbiraemo e - i raboti
> za po-slozhni danni - klasove, strukturi i prochie. Mozhe bi dori e po-burzo - no
> spored men njama goljamo znachenie.
Естествено. _Всички_ ползват трета променлива. Останалите методи са за форумите на dir.bg. Така като гледам за да работи някакъв такъв метод за размяна на място трябват две неща.
1. Езика за програмиране да предоставя някаква операция спрямо която данните да образуват група (XOR, ADD, или даже MUL ако не смятаме нулата).
2. Езика за програмиране да предоставя възможност за намиране на инверсния елемент на даден, при това на място без да ползваме допълнителна променлива (XOR, SUB, DIV).
Що се отнася до скоростта, така или иначе поне интелската фамилия се движи в посока RISC, и подозирам че идеята е всичко да става за по един такт даже и MUL-а :-) Така че дали е XOR, ADD, или размяна през трета променлива, все тая.
> za po-slozhni danni - klasove, strukturi i prochie. Mozhe bi dori e po-burzo - no
> spored men njama goljamo znachenie.
Естествено. _Всички_ ползват трета променлива. Останалите методи са за форумите на dir.bg. Така като гледам за да работи някакъв такъв метод за размяна на място трябват две неща.
1. Езика за програмиране да предоставя някаква операция спрямо която данните да образуват група (XOR, ADD, или даже MUL ако не смятаме нулата).
2. Езика за програмиране да предоставя възможност за намиране на инверсния елемент на даден, при това на място без да ползваме допълнителна променлива (XOR, SUB, DIV).
Що се отнася до скоростта, така или иначе поне интелската фамилия се движи в посока RISC, и подозирам че идеята е всичко да става за по един такт даже и MUL-а :-) Така че дали е XOR, ADD, или размяна през трета променлива, все тая.
Ах да, още нещо
push dword ptr ds:[var_1]
push dword ptr ds:[var_2]
pop dword ptr ds:[var_1]
pop dword ptr ds:[var_2]
push dword ptr ds:[var_2]
pop dword ptr ds:[var_1]
pop dword ptr ds:[var_2]
Впрочем тук трябва доуточнение
Дали говорим за използване на променлива на ниво процесор или на ниво език за програмиране. Защото ако е второто, то това е изцяло въпрос на владеене на съответния синтаксис на езика. На C++ едно решение със шаблони което да реализиращо някоя обща inline функция е _начинът_ да се реши проблема. А на perl, имайки предвид възможностите му за работа със списъци, задачата директно преминава към разряда на неинтересните.