Liczba całkowita (typ danych): Różnice pomiędzy wersjami

[wersja nieprzejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
Thijs!bot (dyskusja | edycje)
m robot dodaje: sv:Integer
poprawa linków, drobne merytoryczne
Linia 11:
 
===Sposoby zapisu liczb ujemnych===
Dowolny sposób zapisu liczb ze [[znak liczby|znakiem]]iem wymaga co najmniej jednego dodatkowego bitu - [[bit znaku|bitu znaku]]. Zazwyczaj używa się najstarszego bitu dla danego rozmiaru komórki pamięci.
 
Najbardziej naturalnym dla [[człowiek]]aczłowieka sposobem uwzględnienia znaku jest potraktowanie najstarszego bitu jako bitu znaku, a pozostałych bitów jako wartości bezwzględnej liczby (zapis [[Kod znak-moduł|znak-moduł]]). Przykład (zapis pozycyjny na czterech bitach):
* 0101<sub>2</sub> to 5<sub>10</sub>
* 1101<sub>2</sub> to -5<sub>10</sub>
 
W tym zapisie zero można przedstawić na dwa sposoby: kasując wszystkie bity oraz ustawiając jedynie bit znaku.
 
"[[Kod uzupełnień do jedności|Dopełnienie do jedynki]]" polega na odwróceniu wszystkich bitów odpowiedniej liczby dodatniej. Przykład:
Linia 21 ⟶ 23:
* 1010<sub>2</sub> to -5<sub>10</sub>
 
WRównież w tym zapisie zero można przedstawić na dwa sposoby: jako komórkę o wszystkich bitach ustawionych ('''1''') lub o wszystkich bitach wyzerowanych. Dopełnienie do jedynki jest używane w maszynach [[PDP-1]] i [[UNIVAC 1100]].
 
Najczęściej używanym (zwłaszcza w komputerach osobistych) jest zapis "[[Kod uzupełnień do dwóch|dopełnienia do dwóch]]". Zmiana znaku polega w nim na odwróceniu wszystkich bitów liczby wyjściowej i dodaniu jedynki - w tej operacji pośredniej liczba jest zawsze traktowana jakby była dodatnia. Okazuje się, że najstarszy bit można zinterpretować jako bit [[znak]]uznaku. Przykład:
* 0101<sub>2</sub> to 5<sub>10</sub>
* 1011<sub>2</sub> to -5<sub>10</sub>
 
Ten zapis pozwala uniknąć niejednoznacznej postaci zera (kosztem niesymetryczności zakresu reprezentowanych liczb) oraz ułatwia dodawanie. Dodawanie w tym zapisie poleganie naróżni potraktowaniusię liczbniczym jakood dodatnich, dodaniu, a następnie pominięciu przeniesienia z najstarszego bitu. Metoda daje niewłaściwe wyniki przy dodawaniu dwóch dużychdodawania liczb obinarnych tym samymbez znaku. TaWystąpienie sytuacjadokładnie jestjednego podobnaz doprzeniesień: dodawaniaz dużychnajstarszego liczbbitu bez(bitu znaku,) tzn.i gdyna wyniknajstarszy dodawaniabit nieświadczy mieścio sięprzekroczeniu jużdopuszczalnego w komórce pamięcizakresu (o rozmiarze takim jak rozmiar komórki liczb dodawanych[[przepełnienie|przepełnieniu]]).
 
==Liczby całkowite w językach programowania==
*Typy danych całkowitych w językach [[C (język programowania)|C]], [[C++]]: ''short int'', ''int'', ''long int'', ''long long int'' (w wersjach ''signed'' i ''unsigned'')
*TypTypy danych całkowitych w [[Pascal]]u: ''integerShortInt'', ''Integer'', ''LongInt''
 
===Liczby całkowite w C, C++===
W [[C (język programowania)|C]], [[C++]] zdefiniowano 8 [[typ danych|typów danych]] przeznaczonych do reprezentacji liczb całkowitych - są to ''short int'', ''int'', ''long int'', ''long long int'' w wersjach ze [[bitznak znakuliczby|znakiem]] (''signed'') oraz bez znaku (''unsigned''). Ich rozmiary w [[bit|bitach]] zależą od implementacji. Standard C99 określa następujące zależności pomiędzy typami:
*''int'' ma mininum 16 bitów
*''long int'' jest co najmniej takiego rozmiaru, co int