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

[wersja nieprzejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
A. (dyskusja | edycje)
A. (dyskusja | edycje)
uogólnienie, integracja z int i podobnymi
Linia 1:
'''[[Liczby całkowite]]''' mogą zostać zapisane w [[pamięć komputerowa|pamięci komputera]] w rozmaity sposób. Obecnie dla [[liczby naturalne|liczb naturalnych]] najczęściej spotykany jest pozycyjny [[dwójkowy system liczbowy]]. Inne znane sposoby zapisu to [[kod Graya]] i [[Kod BCD|BCD]].
 
==Reprezentacja liczby w kodzie binarnym==
====Grupowanie informacji====
 
====Grupowanie informacji====
Na pamięć komputera można spojrzeć jak na komórki. W każdej z nich trzymany jest elementarny ''kwant'' [[informacja|informacji]] zwany [[bit|bitem]]. W praktyce komórki te grupuje się w większe całości zwane, w zależności od rozmiaru, [[Bajt (informatyka)|bajtami]] (8 bitów), słowami (zawierającymi 2 lub więcej bajtów) lub jeszcze inaczej.
 
Linia 8 ⟶ 10:
*[[Kolejność bajtów|big endian]] - na odwrót
 
====Sposoby zapisu liczb ujemnych====
Dowolny sposób zapisu liczb ze [[znak]]iem wymaga co najmniej jednego dodatkowego bitu - bitu znaku. Zazwyczaj używa się najstarszego bitu dla danego rozmiaru komórki pamięci.
 
<ul>
<li>
Najbardziej naturalnym dla [[człowiek]]a 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):
<li>* 11010101<sub>2</sub> to -5<sub>10</sub>
<ul>
<li>* 01011101<sub>2</sub> to -5<sub>10</sub>
 
<li> 1101<sub>2</sub> to -5<sub>10</sub>
</ul>
<li>
"[[Kod uzupełnień do jedności|Dopełnienie do jedynki]]" polega na odwróceniu wszystkich bitów odpowiedniej liczby dodatniej. Przykład:
<li>* 10100101<sub>2</sub> to -5<sub>10</sub>
<ul>
<li>* 01011010<sub>2</sub> to -5<sub>10</sub>
 
<li> 1010<sub>2</sub> to -5<sub>10</sub>
</ul>
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]].
 
<li>
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]]u. Przykład:
<li>* 10110101<sub>2</sub> to -5<sub>10</sub>
<ul>
<li>* 01011011<sub>2</sub> to -5<sub>10</sub>
 
<li> 1011<sub>2</sub> to -5<sub>10</sub>
</ul>
Ten zapis pozwala uniknąć niejednoznacznej postaci zera oraz ułatwia dodawanie. Dodawanie w tym zapisie polega na potraktowaniu liczb jako dodatnich, dodaniu, a następnie pominięciu przeniesienia z najstarszego bitu. Metoda daje niewłaściwe wyniki przy dodawaniu dwóch dużych liczb o tym samym znaku. Ta sytuacja jest podobna do dodawania dużych liczb bez znaku, tzn. gdy wynik dodawania nie mieści się już w komórce pamięci o rozmiarze takim jak rozmiar komórki liczb dodawanych.
</ul>
 
==Liczby całkowite w językach programowania==
===Zobacz też===
*Typy danych całkowitych w językach [[C (język programowania)|C]], [[C++]]: [[''short int]]'', [[''int]]'', [[''long int]]'', [[''long long int]]''
*Typ danych całkowitych w [[Pascal]]u: [[''integer]]''
 
===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 [[bit znaku|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
*''long long int'' ma minimum 64 bity
W praktyce współczesne [[kompilator]]y (takie jak [[GCC]]) zazwyczaj stosują typy o następujących rozmiarach:
*''short int'' ma 16 bitów
*''int'' jest równy ''long int'' i ma 32 bity
*''long long int'' ma 64 bity
 
Typem całkowitym o rozmiarze 8 bitów w praktyce jest także [[typ znakowy]] ''char''.
 
Zakresy liczb całkowitych możliwych do przedstawienia za pomocą danego typu (w przypadku [[GCC]] 3.3.5) przedstawia poniższa tabela:
{| class="wikitable"
|-
! ilość bitów
! nazwa
! zakres
|-
| 8
| ''char''
| &minus;128 — +127 (ze znakiem)<br>0 — +255 (bez znaku)
|-
| 16
| ''short int''
| &minus;32 768 — +32 767 (ze znakiem)<br>0 — +65 535 (bez znaku)
|-
| 32
| ''int'', ''long int''
| &minus;2 147 483 648 — +2 147 483 647 (ze znakiem)<br>0 — +4 294 967 295 (bez znaku)
|-
| 64
| ''long long int''
| &minus;9 223 372 036 854 775 808 — +9 223 372 036 854 775 807 (ze znakiem)<br>0 — +18 446 744 073 709 551 615 (bez znaku)
|}
 
===Zobacz też===
*[[Liczby całkowite]]
*[[typ (informatyka)|Typy danych]]
*Typy danych całkowitych w językach [[C (język programowania)|C]], [[C++]]: [[short int]], [[int]], [[long int]], [[long long int]]
*Typ danych całkowitych w [[Pascal]]u: [[integer]]
 
[[Kategoria:Komputerowe reprezentacjeTypy danych]]
 
[[de:Integer (Datentyp)]]