041

041



32

Ostrożność przy wybieraniu typów ze znakiem lub bez znaku

unikanie nieoczekiwanych wyników

Przed

int nWart; nWart» 4;

Po

unsigned int nWart; nWart» 4;

Podczas działań na liczbach ze znakiem kompilator automatycznie dołącza kod korygujący znaki. Na przykład przesunięcie liczby 0x80000000 ze znakiem o jeden bit w prawo daje liczbę 0x00000000 zamiast oczekiwanej liczby 0x40000000. Dzieje się tak, ponieważ kompilator po rozpoznaniu liczby ze znakiem wykonuje instrukcję SAR a nie SHR. Innymi słowy traktuje liczbę 0x80000000 jako liczbę ujemną i dba o to, aby wynik przesunięcia też był liczbą ujemną.

Jeśli jednak przesuwamy o jeden bit w prawo liczbę bez znaku (na przykład typu unsigned int lub DWORD), to kompilator nie zachowa bitu znaku i otrzymamy spodziewaną wartość.

Przykład: plik bits.cpp


Ostrożność przy łączeniu liczb ze znakiem i liczb bez znaku

unikanie banalnych błędów

Przed

unsigned int nNowePróbki; int nRozmBuf;

nNowePróbki = -1; nRozmBuf = 10;

cout « "Start" « endl;

while (nNowePróbki >= nRozmBuf)


Wyszukiwarka

Podobne podstrony:
SPIS2 TIF Ostrożność przy wybieraniu typów ze znakiem lub bez znaku................ 41 Ostrożność pr
SPIS2 TIF Ostrożność przy wybieraniu typów ze znakiem lub bez znaku................ 41 Ostrożność pr
SPIS2 Ostrożność przy wybieraniu typów ze znakiem lub bez znaku................ 41 Ostrożność przy ł
Slajd22 (107) Cykl rozkazowy Procesor 8086 zawiera 8 - bitowe rozkazy tj. mnożenie i dzielenie binar
DSC04656 (3) I Odchytkę fj, rozrzuca ze znakiem przeciwnym na odczyty na latach, Lub obliczone na po
DSC00276 adhczyjnym folii polimerowych ze sobą lub z Ibliuml ■/. innych materiałów I .aminowa nie pr
DSC02138 90 lub fotograficzna. Mają one tę cechę, że gromadzą materiał bez wyróżnia-nia poszczególny
93 § 1. Pojęcie funkcji przy czym pierwiastki bierzemy ze znakiem plus, ponieważ kąty a i /?, na pod
We fragmencie „Przed” porównujemy liczbę całkowitą ze znakiem z liczbą całkowitą bez znaku. Kompilat
ANSI C 0 2 TYPY, OPERATORY I WYRAŻENIA Kwalifikatory signed (ze znakiem liczby) i unsigned (bez zn
PICT6052 90 lub fotograficzna. Mają one tę cechę, że gromadzą materiał bez wy^. uia poszczególnych z

więcej podobnych podstron