Można konwertować dziesiętne na dwójkowe i dwójkowe na dziesiętne. Ale jak możesz przedstawić liczbę „256”?
255 = 11111111
1 bajt nie może zawierać więcej niż 8 cyfr binarnych (bitów). Jak to jest możliwe?
Można konwertować dziesiętne na dwójkowe i dwójkowe na dziesiętne. Ale jak możesz przedstawić liczbę „256”?
255 = 11111111
1 bajt nie może zawierać więcej niż 8 cyfr binarnych (bitów). Jak to jest możliwe?
Odpowiedzi:
Pytasz, jak reprezentować 256 w formacie binarnym, ale domyślam się, że zastanawiasz się, dlaczego ludzie twierdzą, że bajty mogą przechowywać 256 różnych liczb, gdy największa liczba, jaką przechowuje, to 255. Jak powiedział Claudiop, komputery zaczynają liczyć od 0, więc 0 to właściwie pierwsza liczba, 1 to druga, 2 to trzecia ... 255 to 256.
Ponadto 11111111 to tylko 255 dla bajtów bez znaku. Gdy masz bajt ze znakiem (podpisana wartość to taka, która może przechowywać wartości ujemne), 11111111 jest w rzeczywistości -1. Zobacz http://en.wikipedia.org/wiki/Two's_complement . Sposób działania uzupełnienia dwóch, dodawanie liczby ujemnej do liczby dodatniej daje 0. Jak inni powiedzieli, jeśli dodamy trochę do 11111111, a twój typ danych może obsłużyć tylko 8 bitów, ostatni bit się przepełni i pozostawi ci 0. W przypadku bajtów ze znakiem wartości wynoszą od -128 do 127. 128 liczb ujemnych + 0 + 127 liczb dodatnich = łącznie 256 liczb.
W przypadku wartości ze znakiem pierwszy bit jest bitem „znak”. Jeśli ten bit jest ustawiony, liczba jest ujemna. 10000000 jest ujemny, 01000000 jest dodatni, 11111111 jest ujemny, 01111111 jest dodatni ...
Jeśli korzystasz z systemu Windows (może Mac też go ma), możesz otworzyć kalkulator, przełączyć go w tryb programatora, wybrać sbyte i bawić się bitami, aby zobaczyć, jak korelują z ich reprezentacjami dziesiętnymi.
Cóż, potrzebujesz 2 bajtów, aby to przedstawić. 256 = 00000001 00000000
Jak już wiesz, 255d (dziesiętny) to 11111111b (binarny). Jeśli chcesz teraz dodać 1 do wartości, istnieją dwie możliwości:
Albo masz tylko 8 bitów. W takim przypadku dochodzi do tak zwanego przepełnienia . Tak więc „wewnętrznie”, 1 zostanie dodane, co da 100000000b (256d w 9 bitach). Ale ponieważ masz tylko 8 bitów dostępnych, 8 niższych bitów zostanie „zwróconych”. W rezultacie otrzymujesz 0d = 0b (specjalna flaga przepełnienia zostanie ustawiona na większości architektur komputerowych, tak jak uwaga dodatkowa).
Pomyśl o tym tak samo, jak liczenie palcami. Wyobraź sobie, że twoje palce pokazują 9d. Teraz dodajesz jeszcze jeden palec. Skończysz na 10. Co robisz, jeśli chcesz dodać jeszcze jeden?
Inną możliwością jest to, że masz więcej niż 8 bitów dostępnych. W takim przypadku możesz po prostu dodać jeszcze jedną cyfrę na początku, a wynik będzie naprawdę 100000000b = 256d.
Bajt to najmniejsza „jednostka”, którą może adresować system komputerowy (system pamięci). Oznacza to, że jeśli chcesz poznać tylko jeden bit, musisz poprosić system pamięci o podanie określonego bajtu z adresu, a następnie musisz ustalić wartość bitu, który cię interesuje.
Ale tak samo jak 8 bitów tworzy bajt, istnieją również większe typy danych. 2 bajty tworzą słowo (16 bitów), dwa słowa (cztery bajty, 32 bity) tworzą podwójne słowo. A obecnie standardowe architektury 64-bitowe mają nawet 64-bitowe typy danych (tak zwane rejestry).
Możesz to przedstawić za pomocą operacji przesunięcia nieco (w lewo lub w prawo w zależności od endianizmu reprezentacji binarnej). Na przykład ta jedna linijka działa dla dużej reprezentacji endian (najpierw najważniejszy bajt):
1 << 8
Bajt bez znaku może zawierać tylko 256 wartości, które obejmują zakres [0–255]. W przypadku wartości 256 należy użyć typu danych, który może pomieścić większą wartość, na przykład liczby całkowitej.