Jaka jest binarna reprezentacja „256”? [Zamknięte]


15

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?


3
Jak już powiedział @Serious. Potrzebujesz jeszcze jednego, bo komputery zaczynają odliczać od 0. To 11 w „języku ręki” lub „jeszcze jedna osoba” (bajt) w prawdziwym świecie :)
SOMN

2
Zamknęłam to jako „Nie prawdziwe pytanie”, ponieważ trudno jest powiedzieć, co tak naprawdę chcesz wiedzieć. Czy chcesz poznać binarną reprezentację liczby? Zastanawiasz się, jak to możliwe, że liczba istnieje, nawet jeśli nie mieści się w bajcie? Zastanawiasz się, jak dane są przechowywane w bitach i bajtach? Tak, 1 bajt nie może pomieścić więcej niż 8 bitów, ponieważ taka jest definicja bajtu. Ale to ogólnie nie nakłada żadnych ograniczeń na liczby.
Der Hochstapler,

Nie można reprezentować 256 na 8-bitach.
Overmind

Odpowiedzi:


40

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.

Kalkulator Windows pokazujący 256 w systemie dziesiętnym i binarnym


12

Cóż, potrzebujesz 2 bajtów, aby to przedstawić. 256 = 00000001 00000000


11

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).


Tak, a komputer nie uważa tych 64 bitów za grupę 8 oddzielnych bajtów, ale za pojedynczą jednostkę składającą się z 64 bitów. Na przykład, jeśli masz podpisane wartości, to tylko jeden z tych 64 bitów jest bitem znaku.
Pan Lister,

5

Ma wartość 100000000 i potrzebuje więcej niż jednego bajtu. Właściwie potrzebuje 9 bitów.


0

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.