Maksymalne możliwe do przechowania liczby w różnych typach.

0

Witam, czy ktoś może mi wyjaśnić, czemu np. skoro byte - 1 bajt posiada zakres od -128 do 127 , skoro możemy na 8 bitach zapisać 1111 1111 = 255? I jeszcze pytanie, skoro przyjmujemy, że liczymy 1000 0000, to czemu od -128 do 127, a nie od -128 do 128?
Chodzi o zakodowanie 0 ? Z góry thx.

3

Na ośmiu bitach możesz zapisać zakres 0-255, jeśli zakodujesz liczbę za pomocą wszystkich ośmiu bitów, albo zakres -128 - 127, jeśli zakodujesz liczbę za pomocą siedmiu bitów, a pierwszy (w rozumieniu "najbardziej wysunięty na lewo", najbardziej znaczący bit) przeznaczysz na znak (0 to liczba dodania, 1 to ujemna).
https://pl.wikipedia.org/wiki/Kod_uzupełnień_do_dwóch

0

Rozumiem, że tak jest np. w Javie, że ostatni, najbardziej znaczący bit przeznaczony jest na zakodowanie znaku? A czemu skoro maksymalną możliwą zapisaną liczbą jest 0111 1111, to zakres wynosi od -128 do 127, a nie od -127 do 127?

1

To o czym mówisz (-127 do 127) to zapis U1, a jego "wadą" jest to, że możesz zapisać w nim dwa zera (ujemne i dodatnie).
Matematycznie nie ma to sensu, stąd wziął się zapis U2, gdzie masz tylko jedno zero, a w zamian zakres -128 do 127.

0

Bo -127 do 127 to 255 wartości, a możesz przechowywać 256.
Patrząc z innej strony, bo jest 0, a nie ma -0, stąd asymetria.

0

Dzięki, już wszystko jasne.

0

A w typie double w javie jaki jest zakres liczb przed i po przecinku ? Skoro zapisujemy na 63 bitach(bo najbardziej znaczący na znak), to maksymalnie możemy uzyskać liczbę wielkości - 9 223 372 036 854 775 807 ? Taki jest zakres przed i po przecinku ? Czy to się tyczy przed i po zarazem ?

0

Liczby zmiennoprzecinkowe zapisywane są w zupełnie inny sposób - lektura na dziś: IEEE 745.

0

Witam, czy ktoś może mi wyjaśnić, czemu np. skoro byte - 1 bajt posiada zakres od -128 do 127 , skoro możemy na 8 bitach zapisać 1111 1111 = 255?

Na jednym bajcie można zapisać 256 różnych wartości. To jakie to będą wartości, to już kwestia przyjętej konwencji.
Dla uproszczenia: na 3 bitach można zapisać 8 różnych wartości. Mogą to być na przykład zakresy...

1..8
0..7
-1..6
-2..5
-3..4
-4..3
-5..2
-6..1
-7..0
-8..-1
-9..-2

W praktyce używa się przypadku drugiego (od zera - liczba bez znaku) i szóstego (liczba ze znakiem w kodowaniu U2).
Za każdym razem jest to osiem różnych, kolejnych wartości, tylko przyjęty zakres jest inny.
Java ma tylko liczby ze znakiem, czyli dla 8-bitowego bajtu oznacza to zakres -128..127.

64-bitowy double też jest ograniczony ilością różnych wartości jakie może przyjąć - tego nie przeskoczymy. Ale znaczenie liczbowe tych wartości jest inne niż dla liczb całkowitych, więc i zakres i dokładność są inne. Jakie - poczytaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1