ANSI C 9

ANSI C 9



DODATEK A PRZEWODNIK JĘZYKA C_______—-

Gdy wartość całkowita jest przekształcana do typu ze znakiem, wówczas jej wartość nie ulegnie zmianie, jeśli może być reprezentowana w nowym typie; w przeciwnym przypadku wynik zależy od implementacji.

A6.3 Wartości całkowite i zmiennopozycyjne

Przy przekształcaniu wartości typu zmiennopozycyjnego do typu całkowitego gubi się jej część ułamkową; jeśli wyniku nie można wyrazić w tym typie całkowitym, to skutek przekształcenia nie jest zdefiniowany. W szczególności nie jest zdefiniowany wynik przekształcenia ujemnej wartości zmiennopozycyjnej do typu całkowitego bez znaku.

Jeśli wartość całkowita jest przekształcana do typu zmiennopozycyjnego i zawiera się w dopuszczalnym przedziale wartości tego typu, ale nie jest dokładnie reprezentowal-na, to wynikiem jest najbliższa większa albo mniejsza reprezentował na wartość. Jeśli wartość nie zawiera się w tym przedziale, skutek nie jest zdefiniowany.

A6.4 Typy zmiennopozycyjne

Przy przekształcaniu wielkości zmiennopozycyjnej do typu zmiennopozycyjnego o równej lub większej precyzji jej wartość nie zmienia się. Jeśli jest ona przekształcana do typu zmiennopozycyjnego o mniejszej precyzji i jej wartość zawiera się w rcprezento-walnym przedziale, wynikiem jest najbliższa większa albo mniejsza reprezentował na wartość. Jeśli wynik nie zawiera się w tym przedziale, skutek nie jest zdefiniowany.

A6.5 Przekształcenia arytmetyczne

Wiele operatorów powoduje przekształcenia swoich argumentów i określa typ wyniku według podobnych zasad. W efekcie chodzi o dopasowanie typów argumentów do wspólnego typu, który jest także typem wyniku. Poniższe reguły stanowią wzorzec zwykłych przekształceń arytmetycznych:

Po pierwsze, jeśli któryś z argumentów jest typu long double, to drugi jest przekształcany do long double.

W przeciwnym przypadku, jeśli któryś z argumentów jest typu double, to drugi jest przekształcany do double.

W przeciwnym przypadku, jeśli któryś z argumentów jest typu float, to drugi jest przekształcany do float.

W przeciwnym przypadku do obu argumentów stosuje się promocję typu całkowitego; jeśli teraz któryś z argumentów jest typu unsigned long int, to drugi jest przekształcany do unsigned long int.

W przeciwnym przypadku Jeśli jeden z argumentów jest typu long unsigned int, wynik zależy od tego, czy long int jest w stanie wyrazić wszystkie wartości typu unsigned int; jeśli tak, to argument typu unsigned int jest przekształcany do typu long int; jeśli nie - oba są przekształcane do typu unsigned long int.

W przeciwnym przypadku, jeśli jeden z argumentów jest typu long int, to drugi jest przekształcany do long int.

W przeciwnym przypadku, jeśli któryś z argumentów jest typu unsigned int, to drugi jest przekształcany do unsigned int.

W przeciwnym przypadku oba argumenty mają typ int.

Zaszły tu dwie zmiany. Po pierwsze, arytmetykę zmiennopozycyjną można wykonywać w pojedynczej precyzji; w pierwszym wydaniu książki podkreślano, że całą arytmetykę zmiennopozycyjną realizuje się w podwójnej precyzji. Po drugie, krótsze typy całkowite bez znaku w kombinacjach z dłuższymi ze znakiem nie przenoszą właściwości braku znaku arytmetycznego na typ wyniku; uprzednio właściwość braku znaku była dominująca. Nowe zasady są nieco bardziej skomplikowane, ale trochę ograniczają niespodzianki wynikające ze spotkania się wartości bez znaku z wartościami ze znakiem. Nadal można otrzymać nieoczekiwane wyniki przy porównywaniu wielkości bez znaku z wielkościami ze znakiem o tym samym rozmiarze.

A6.6 Wskaźniki i wartości całkowite

Wartość całkowitą można dodać do lub odjąć od wskaźnika; jest ona wówczas przekształcana zgodnie z zasadami podanymi przy opisie operatora dodawania (p. A7.7).

Dwa wskaźniki do obiektów tego samego typu, należących do tej samej tablicy, można od siebie odjąć; w tym przypadku wynik jest przekształcany do wartości całkowitej zgodnie z zasadami podanymi przy opisie operatora odejmowania (p. A7.7).

Stałe wyrażenie całkowite o wartości zero. ewentualnie zrzutowane do typu void *, można przekształcić do wskaźnika dowolnego typu za pomocą rzutowania, przypisania lub porównania. Produkuje to pusty wskaźnik, równy innemu pustemu wskaźnikowi tego samego typu, ale różny od dowolnego wskaźnika do funkcji lub obiektu.

Dopuszcza się również inne przekształcenia wskaźników, ale są one zależne od maszyny. Takie przekształcenia muszą być realizowane za pomocą jawnych operatorów przekształcenia typów lub za pomocą rzutowania (p. A7.5 i A8.8).

Wskaźnik można przekształcić do typu całkowitego, wystarczająco obszernego, aby pomieścił wartość wskaźnika; wymagany rozmiar typu całkowitego zależy od implementacji. Od implementacji zależy również sposób takiego przekształcenia.

261


Wyszukiwarka

Podobne podstrony:
ANSI C 9 DODATEK A PRZEWODNIK JĘZYKA C________■ Kwalifikatory typu wskazują specjalne właściwości
ANSI C 9 DODATEK A PRZEWODNIK JĘZYKA C________ jednostka-tłumaczen
ANSI C 9 DODATEK A PRZEWODNIK JĘZYKA C wiersz-sterujący: #    define identyfikator
ANSI C 6 DODATEK A PRZEWODNIK JĘZYKA C_____ Wynikiem tej operacji jest bitowa różnica symetryczna
ANSI C 4 DODATEK A PRZEWODNIK JĘZYKA C ____—-- stropy jest funkcją zwracającą wartość całkowitą i
ANSI C 0 DODATEK A PRZEWODNIK JĘZYKA C_________ Obiekt typu całkowitego można jawnie przekształcić
ANSI C 4 DODATEK A PRZEWODNIK JĘZYKA C_______ wynikiem jest 1; jeśli odnosi się do tablicy, to wyn
ANSI C 6 DODATEK A PRZEWODNIK JĘZYKA ______ o nieokreślonej liczbie elementów całkowitych”, „funkc
ANSI C 8 DODATEK A PRZEWODNIK JĘZYKA C stałe przypadków są różne od wartości wyrażenia i nie wystę
ANSI C 5 DODATEK A PRZEWODNIK JĘZYKA C_________A2.1 Jednostki leksykalne Istnieje sześć klas jedno
ANSI C 6 DODATEK A PRZEWODNIK JĘZYKA C_____.____A2.5.2 Stałe znakowe Stała znakowa jest ciągiem zł
ANSI C 7 DODATEK A PRZEWODNIK JĘZYKA C------- czaj umieszczane w oddzielnych wierszach; w kilku pr
ANSI C 8 DODATEK A PRZEWODNIK JĘZYKA C_________ Wszystkie z typów zmiennopozycyjnych: pojedynczej
ANSI C 1 DODATEK A PRZEWODNIK JĘZYKA C Implementacje różnią się reakcjami na dzielenie przez zero
ANSI C 2 DODATEK A PRZEWODNIK JĘZYKA C W pierwszym wydaniu książki typ wyrażenia przyrostkowego by
ANSI C 5 DODATEK A PRZEWODNIK JĘZYKA CA7.8 Operatory przesunięcia Operatory przesunięcia « i » są
ANSI C 7 DODATEK A PRZEWODNIK JĘZYKA C__________ rekurencyjnie, podskładowych nie może być kwalifi
ANSI C 8 DODATEK A PRZEWODNIK JĘZYKA
ANSI C 0 DODATEK A PRZEWODNIK JĘZYKA C ___——- łujących się do samych siebie: struktura lub unia mo

więcej podobnych podstron