Intrebare !
Intrebare !
Salut . Am o intrebare la care as vrea sa ma ajutati .. De exemplu declar 2 variabile int .. Cum as putea afisa care dintre ele e minimul si care e maximul fara a folosi cicluri : for , dowhile, while , if , etc etc. ? Am intrebat de multa lume dar nu am gasit inca raspuns.
Re: Intrebare !
În cazul variabilelor obișnuite de 32 de biți, încearcă această soluție:
Code: Select all
int variabila1 = 10;
int variabila2 = 20;
int valori[] = { variabila1, variabila2 };
int minimul = valori[unsigned( variabila2 - variabila1 ) >> 31];
int maximul = valori[unsigned( variabila1 - variabila2 ) >> 31];
Re: Intrebare !
Totul merge foarte bine .. Dar imi poti explica te rog fiecare linie ? Fiecare detaliu ?a
- Marius Bancila
- Fondator
- Posts: 2344
- Joined: 11 Jul 2007, 11:45
- Judet: Timiş
- Location: Timisoara
- Contact:
Re: Intrebare !
Daca variabila2 > variabila1, atunci expresia variabila2 - variabila1 e pozitiva. Astea inseamna ca cel mai semnificativ bit, cel de semn, e 0. Prin shiftarea la dreapta cu 31 de pozitii, ramane doar bitul de semn, adica zero. Prin urmare, unsigned( variabila2 - variabila1 ) >> 31 va fi egala cu 0, iar minimul este valori[0], adica variabila 1. In aceleasi conditii, expresia variabila1 - variabila2 e negativa. Astea inseamna ca cel mai semnificativ bit, cel de semn, e 1. Prin shiftarea la dreapta cu 31 de pozitii acest bit de 1 ajunge pe cel mai putin semnificativ bit, si valoarea rezultata, de tip unsigned, e 1. Maximul va fi egal cu valori[1], adica cu variabila2.
Daca variabila 1 < variabila2, minimul si maximul vor fi exact invers.
Daca variabila 1 < variabila2, minimul si maximul vor fi exact invers.
Re: Intrebare !
Merci mult am inteles, o chestie care inca nu imi este clara: de ce `unsigned(expression)` ce face el? nu ar trebui sa transforme numarul in unul fara semn?
si least significant bit mereu sa fie pozitiv, adica `0`?
merci
si least significant bit mereu sa fie pozitiv, adica `0`?
merci