Poredjenje signed i unsigned [C++]

Poredjenje signed i unsigned [C++]

offline
  • Pridružio: 06 Feb 2012
  • Poruke: 1872

Imam mali problem.
Imam klasu koja enkapsulira pokazivac na int (i čiji objekti treba da sadrže dinamički niz integera) i duzinu tog niza. Konstruktoru treba da proslijedim duzinu tog niza i inicijalizatorsku listu kojom cu odmah i inicijalizivati onoliko prvih elemenata koliko se proslijedi, ali treba omoguciti i slucaj da se alocira niz koji je duzi od dobijene inicijalizatorske liste (jer ce se kasnije moci dodavati dodatni elementi).
U konstruktoru, naravno, moram vrsiti provjeru duzine, jer je tipa int i moguce je poslati negativan broj ili 0, a to mi prijavljuje warning.
Provjeru vrsim poredjenjem sa duzinom inicijalizatorske liste.
Ali problem je sto se porede signed i unsigned tipovi.
Objekat_inicijalizatorske_liste.size() vraca size_t (unsigned int) a argument kojim se prima duzina je int.
Nisam imao ideja osim da duzina bude tipa unsigned int, ali bi to mijenjalo vrijednost, ako korisnik učita neki negativan broj, te bi to davalo netačan podatak o duzini.

Kako to da rijesim?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

A da proslediš int, proveriš da li je u odgovarajućem opsegu i onda ga kastuješ u unsigned int? Ili jednostavno pretpostaviš da taj niz neće biti veći od polovine opsega za unsigned int, i onda taj unsigned int kastuješ u int (mada se to radi i implicitno, pa odatle taj warning)?



offline
  • Pridružio: 06 Feb 2012
  • Poruke: 1872

Drugi prijedlog mi je bolji. Pokusacu tako. Polovina opsega za unsigneg int je dovoljno velik broj.
Sto se tice prvog prijedloga...previse mi je to provjera (gomilanje koda). Prednost je što, kada uporedim sa duzinom liste, ja sam vec provjerio da li je u opsegu. Ne trebam dva puta provjeravati.

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Pa sredina opsega za unsigned int je ista kao maksimalna vrednost za int, tako da ti se to uklapa. Smile

Inače ovaj drugi deo nisam shvatio baš najbolje. Smile

offline
  • Pridružio: 06 Feb 2012
  • Poruke: 1872

vasa.93 ::Pa sredina opsega za unsigned int je ista kao maksimalna vrednost za int, tako da ti se to uklapa. Smile
Joj da, totalno sam zaboravio za to.

vasa.93 ::Inače ovaj drugi deo nisam shvatio baš najbolje. Smile
Htio sam reći da bi bilo vise posla. (odnosno malo vise koda) Very Happy
Morao bi prvo provjeriti da li je u opsegu. Zatim kastovati. Zatim opet provjeriti da li je veci ili manji od duzine liste.

Ko je trenutno na forumu
 

Ukupno su 1133 korisnika na forumu :: 42 registrovanih, 7 sakrivenih i 1084 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., amaterSRB, Bokiboks, ccoogg123, dika69, Djokislav, DPera, DragoslavS, Džordžino, esx66, FileFinder, Fog of War, HrcAk47, hyla, Ivica1102, JOntra, Još malo pa deda, Kubovac, ladro, laganini123, laki_bb, Luka Blažević, maiden6657, mercedesamg, milanovic, mrav pesadinac, naki011, Nemanja.M, Pohovani_00, prashinar, proka89, royst33, Springfield, Srle993, ss10, Sumadija34, Tvrtko I, VJ, Vlada78, x9, zeo, 1107