Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C++ signed i unsigned

[es] :: C/C++ programiranje :: C++ signed i unsigned

[ Pregleda: 1465 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

_ikac
Ivan Raznatovic
Beograd

Član broj: 290105
Poruke: 54
*.dynamic.sbb.rs.



+1 Profil

icon C++ signed i unsigned16.06.2013. u 00:36 - pre 81 meseci
Imam par nejasnih stvari sto se tice ovoga.
Sama definicija kaze da celobrojni tipovi (short i long) bez reci unsigned su signed, po definiciji. Signed celobrojne promenljive imaju ili negativnu ili pozitivnu vrednost.
Unsigned celobrojne promenljive uvek imaju pozitivnu vrednost.

Npr:
unsigned short prima brojeve od 0 do 65.535
signed short prima brojeve od -32.768 do 32.768

Sada sta mene buni ako ja napravim:

Code:
     
     unsigned short int b = 1;
     std::cout << b;

Citat:
// output >> 1


a ako stavim unsigned short int b = -1;
Citat:
// output >> 65535


Sada mene zanima kako je on dosao do ovog broja 65535? Ako UNS neprima negativne brojeve odakle onda ova vrednost? Zasto nije greska?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4867
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+622 Profil

icon Re: C++ signed i unsigned16.06.2013. u 09:57 - pre 81 meseci
Citat:
_ikacsigned short prima brojeve od -32.768 do 32.768

Tačnije, od -32768 do 32767. U zbiru, to je 65536, jer je tu i nula.
Citat:

a ako stavim unsigned short int b = -1;
...
Sada mene zanima kako je on dosao do ovog broja 65535? Ako UNS neprima negativne brojeve odakle onda ova vrednost? Zasto nije greska?

Rezultat ispisa nije -1, nego je 65535. Prema tome, unsigned short nije primio negativan broj.

Onako, na prvu loptu, mislim da se sadržaj unsigned shorta "pegla" po modulu:
b % 65536
... ma šta mu dodeljeno s desne strane.



Ponekad se kod ovakvih delova koda koristi assert(), da se (u nekoj fazi razvoja) uveriš da u kodu slučajno ne dolazi do nepredviđenih vrednosti:
http://www.cplusplus.com/reference/cassert/assert/


[Ovu poruku je menjao X Files dana 16.06.2013. u 11:14 GMT+1]
 
Odgovor na temu

_ikac
Ivan Raznatovic
Beograd

Član broj: 290105
Poruke: 54
*.dynamic.sbb.rs.



+1 Profil

icon Re: C++ signed i unsigned16.06.2013. u 11:12 - pre 81 meseci
Citat:
Rezultat ispisa nije -1, nego je 65535. Prema tome, unsigned short nije primio negativan broj.

Pa to sam ja i napisao samo nisi pogledao bolje.
Hvala u svakom slucaju izgooglao sam nesto ali opet iole mi je jasno. :/
 
Odgovor na temu

Picsel
Beograd

Član broj: 39817
Poruke: 440
*.dynamic.isp.telekom.rs.



+7 Profil

icon Re: C++ signed i unsigned16.06.2013. u 11:30 - pre 81 meseci
-1 je 1111....11 u binarnom zapisu. Ako taj binaran zapis posmatramo kao signed broj, on se u dekadni pretvara kao -2^15 + 2^15 + 2^14 + ... + 2^1 + 2^0, sto je -1.
Ako se to predstavi kao unsigned broj, to ce biti 65535 (najznacajniji bit sad nije -2^15 vec +2^15).
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1912
..106.109.adsl.dyn.beotel.net.

Sajt: stackoverflow.com/users/1..


+471 Profil

icon Re: C++ signed i unsigned16.06.2013. u 13:03 - pre 81 meseci
Ono što tebe buni jeste nemogućnost kompajlera da te upozori da dodeljuješ negativnu konstatnu neoznačenoj vrednosti. Kompajler to neće uraditi jer nema nikakve opasnosti po tebe, samo će se ta vrednost interpretirati na drugi način, program se neće neočekivano ponašati.

Ono što je opasno je poređenje, i tu će te kompajler valjano upozoriti:

Code:

unsigned int i = 5;
int j = -1;

if(i < j)
    cout << "Manje!";
else
    cout << "Veće!";


U ovom slučaju, j će se promovisati u unsigned tip i rezultat će biti "Manje" jer je 5 manje od std::numeric_limits<unsigned> - 1.
 
Odgovor na temu

_ikac
Ivan Raznatovic
Beograd

Član broj: 290105
Poruke: 54
*.dynamic.sbb.rs.



+1 Profil

icon Re: C++ signed i unsigned18.06.2013. u 14:25 - pre 81 meseci
Zahvaljujem na odgovorima i na pomoci.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C++ signed i unsigned

[ Pregleda: 1465 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.