Intrebare !

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
aiwa
Junior
Junior
Posts: 4
Joined: 16 Sep 2017, 12:17
Judet: Bistriţa-Năsăud

Intrebare !

Post by aiwa » 16 Sep 2017, 12:20

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.



Viorel
Microsoft MVP
Microsoft MVP
Posts: 286
Joined: 13 Jul 2007, 12:26

Re: Intrebare !

Post by Viorel » 16 Sep 2017, 18:00

Î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];

aiwa
Junior
Junior
Posts: 4
Joined: 16 Sep 2017, 12:17
Judet: Bistriţa-Năsăud

Re: Intrebare !

Post by aiwa » 18 Sep 2017, 16:56

Totul merge foarte bine .. Dar imi poti explica te rog fiecare linie ? Fiecare detaliu ?a

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2343
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: Intrebare !

Post by Marius Bancila » 19 Sep 2017, 09:01

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.
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

aiwa
Junior
Junior
Posts: 4
Joined: 16 Sep 2017, 12:17
Judet: Bistriţa-Năsăud

Re: Intrebare !

Post by aiwa » 19 Sep 2017, 17:04

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

Post Reply