Znajduję kilka źródeł, które twierdzą, że potęga dwóch bitów w słowie binarnym (np. 8 bitów na bajt) jest „dobrą rzeczą” lub „wygodą”. Nie znalazłem źródła, które wskazywałoby dlaczego.
Z Jaka jest historia, dlaczego bajty mają osiem bitów? czytamy w zatwierdzonej odpowiedzi:
Komputery binarne motywują projektantów do tworzenia rozmiarów potęgi dwóch.
Dobrze ale dlaczego? W tym samym pytaniu, ale w polu komentarza do pytania znajduję:
Czy ostatnie zdanie jest żartem? 12-bitowy bajt byłby niewygodny, ponieważ nie jest potęgą 2. - robjb
Ponownie, bez uzasadnienia ...
obliczenia adresów są o wiele prostsze z potęgami 2, a to się liczy, gdy logujesz się z surowych tranzystorów w małych puszkach - Mike
Ponieważ bajty są najmniejszą jednostką adresowalną, nie ma to większego sensu. Jednak wiele komentarzy na temat komentarza. Może coś mi umknęło.
Z Wikipedii :
Faktyczny standard ośmiu bitów to wygodna moc dwóch, pozwalająca na wartości od 0 do 255 dla jednego bajtu
I byłoby to wygodne, ponieważ ...?
Dla wyjaśnienia chodzi o liczbę bitów na bajt (np. 8 lub 6 itd.), A nie liczbę wartości na bajt (np. 2 8 lub 2 6 itd.). Ze względu na zamieszanie zwracam również uwagę, że nie chodzi o rozmiary słów.
Nie jestem zbytnio zainteresowany względami historycznymi. Zostały one dobrze wyjaśnione gdzie indziej (patrz linki).
Podobne pytanie dotyczące SO: /programming/1606827/why-is-number-of-bits-always-a-power-of-two
Odpowiedzi:
Nie sądzę, by 8-bitowe bajty odniosły sukces, ponieważ mają szerokość, która jest potęgą dwóch. Jeśli nie chcesz zajmować się bitami indywidualnie - a to jest cecha wspólna ani teraz, ani w przeszłości - posiadanie potęgi dwóch nie ma żadnego praktycznego znaczenia (to po prostu - teraz znacznie więcej niż w przeszłości, gdy oszczędzasz ważne były pewne dyskretne komponenty - odruch dla inżynierów sprzętu i oprogramowania i pozostawanie w znajomej ziemi jest ważne dla innych celów), i nie pamiętam, że widziałem o tym w mojej historii odczytów komputerowych (1). Potrzebne były małe litery, co oznaczało coś więcej niż dominujące wówczas 6-bitowe zestawy znaków. ASCII był 7-bitowy, ale ASCII był wtedy traktowany wyłącznie jako wymiana między nimi (i dlatego miał być tłumaczony na wewnętrzny kod do obsługi), a zatem
a dla sprzętowego wygranego 8-bitowego bajtu, ponieważ pozwolił on spakować 2 cyfry dziesiętne w jednym bajcie w czasie, gdy 75% danych było liczbowych i reprezentowanych w BCD (3).
(1) na przykład Blaauw i Brooks, Architektura komputerów ; MacKenzie, Zestawy znaków kodowanych, Historia i rozwój prowadzą dyskusję na ten temat.
(3) Dokument X3.2 - podkomitet odpowiedzialny za ASCII - cytowany przez MacKenzie.
(3) Znowu MacKenzie.
źródło
Poza wypadkiem historycznym nie ma szczególnego powodu, dla którego powinniśmy używać 8/16/32/64 bitów. Przypuszczam, że 12/24/48/96 bit byłby naprawdę bardziej użyteczny.
Do obsługi tekstu Unicode korzystający z hipotetycznego UTF-24 byłby tańszy niż UTF32; hipotetyczny UTF-12 przechowałby wszystkie jedno- i dwubajtowe znaki UTF-8 w 12 bitach oraz wszystkie trzy- i czterobajtowe znaki UTF-8 w 24 bitach (zakres zostałby nieco zmniejszony do 2 ^ 20 znaków, ale to wciąż cztery razy więcej niż jest powszechnie stosowane); kod byłby prostszy, ponieważ istnieją tylko dwa warianty.
W przypadku zmiennoprzecinkowego zwykle wystarcza 48 bitów. 96 bit jest znacznie lepszy niż 80 bit rozszerzony. 24-bit jest przydatny w grafice; znacznie bardziej użyteczny niż 16-bitowy obsługiwany przez niektóre karty graficzne. 48-bitowe wskaźniki mogą obsłużyć 256 terabajtów.
Jedyną wadą są tablice bitów, w których dzielenie przez 12 wymaga obliczenia pozycji bajtów. Jeśli wydaje się to ważne, jestem pewien, że podział na 12 można dość skutecznie zaimplementować w sprzęcie.
źródło
Jest to wygodne ze względu na wspólne architektury sprzętowe wykorzystujące wielokrotności 8, np. Architektury 32-bitową i 64-bitową. Oznacza to wyższą wydajność podczas korzystania z 8-bitowego przechowywania i transmisji danych.
„Jednak względy ekonomicznej konstrukcji silnie przemawiają za jednym rozmiarem lub kilkoma rozmiarami związanymi przez wielokrotności lub ułamki (podwielokrotności) z rozmiarem podstawowym. Ten preferowany rozmiar staje się słowem wielkości architektury”.
Word (architektura komputerowa)
Zobacz także: Jaka jest historia tego, dlaczego bajty mają osiem bitów?
źródło
2⁸-1
.Według artykułu z Wikipedii słowo to znacznie ułatwia obliczenia związane z adresowaniem pamięci:
źródło
Jest ściśle związany z przestrzenią adresową. Dodając jeszcze trochę do swojej magistrali adresowej, możesz adresować dwa razy więcej lokalizacji w pamięci. Więc kiedy dodasz tę dodatkową linię, możesz równie dobrze wykorzystać ją w pełnym zakresie.
Prowadzi to do naturalnego postępu 1, 2, 4, 8, 16, 32 i tak dalej.
Na poziomie technicznym produkcji łatwo jest również powtórzyć ten sam wzór litograficzny. Oznacza to podwojenie. Jeśli zaczniesz od jednego zatrzasku, a następnie podwoisz wzór, miniesz 8, a nie 6, 10 lub 12.
źródło
Nie zawsze szerokość słowa jest potęgą dwóch. Ostatnio robiłem trochę kodowania w DSP SHArC, który ma 32-bitową szerokość słowa dla liczb, ale nie dla opcodów (które mają szerokość 48 bitów).
Prawdopodobnie powodem, dla którego szerokości słów są potęgą dwóch, są niektóre instrukcje, które testują (lub ustawiają, czyścą lub przełączają) pojedynczy bit lub przesuwają (lub obracają) w lewo lub w prawo o określoną liczbę bitów. W kodzie operacji znajduje się pole bitowe określające lokalizację pojedynczego bitu lub liczbę bitów do przesunięcia. Jeśli szerokość słowa jest potęgą dwóch, to pole bitowe wymaga bitów log 2 (word_width) do pokrycia całego słowa. Oznacza to, że słowo o szerokości 32 bitów potrzebuje 5-bitowego pola w kodzie operacji dla tych operacji. Gdyby słowo miało szerokość 33 bitów, potrzebowałoby 6, w przeciwnym razie nie byłoby w stanie objąć całego słowa, ale byłoby tak również w przypadku, gdyby słowo miało szerokość 64 bitów.
Bity w opcode są niezwykle cenne, więc zwykle nie chcą ich marnować. Wtedy sensowne jest, aby słowo miało moc 2 szerokości.
Powodem, dla którego bajty mają szerokość 8 bitów, jest to, że jest to najmniejsza z dwóch potęg, która może pomieścić znak ASCII (czyli 7 bitów).
źródło