czwartek, 6 grudnia 2007

.pamiętajcie o konwersjach

.moze przez to ze zapisze to tu ten nie bede o tym zapominal. Jedna z dziwnych rzeczy w C++. Typy signed i unsigned i rzadzace nimi prawa.

1. Nie jest określone przez standard czy typ char jest signed czy unsigned czyli na róznych platformach mozemy miec rożne znaczenie wzorca bitowego tej samej liczby.

za TCPL:

char c = 0xFF;
int i = c;

i moze miec wartość 255 lub -1 zaleznie od implementacji

2.Porownania typow unsigned/sidneg. Choć już większość kompilatorów rzuca warningami gdy dochodzi do takiego porownania, ale wielu z nas nie zwraca na to uwagi.

signed int x = -2147483646
unsigned int y = 2147483648

(x < y) daje nam (2147483650 < 2147483648) czyli false!  

kompilator zasosował niejawną konwersje do typu unsigned.

Tu sa akrat wydumane przykłady, ale bardzio często wartości oscylują wokół 0 wiec typ unsigned może być często przekręcany na duże wartości.

1 komentarz:

WooKasZ pisze...

napisz coś nowego ! ;P