Do czego służą liczby ósemkowe (podstawa 8)?

11

Java zapewnia sposoby pisania literałów liczbowych w bazach 2, 8, 10 i 16.

Zastanawiam się, dlaczego uwzględniono bazę 8 , np. int x = 0123;?

Myślę, że może być coś podobnego do faktu, że w systemie szesnastkowym pojemność jednego bajtu to FF + 1 i tak dalej.

jokinjo
źródło
7
Myślę, że twoje pytanie brzmi: „Do czego służą liczby ósemkowe?”
GetMeARemoteJob
Tak, tak powinienem sformułować pytanie. Dzięki za wszystkie interesujące odpowiedzi. Pomyślałem, że może mieć to podłoże historyczne, ale nie miałem doświadczenia niezbędnego, aby położyć na tym palec.
jokinjo

Odpowiedzi:

16

Ta odpowiedź została napisana na pierwotne pytanie: „Dlaczego warto pisać cyfrę w bazie 8?”

Chodziło o to, aby język był znajomy dla tych, którzy znali C itp. W takim razie pytanie brzmi: po co je wspierać!

Były stosowane architektury (różne PDP) słów o szerokości 18 bitów (a inne używały słów o długości 36 bitów), więc przydatne byłyby literały, w których cyfra ma szerokość 3 bitów.

Praktycznie jedynym miejscem, w którym widziałem, że jest używane w kodzie Java, jest określenie uprawnień w stylu uniksowym, np 0777 , 0644itd.

(Wrażliwa odpowiedź na pytanie, dlaczego jest obsługiwany, brzmi: „uzyskać pozytywne opinie na temat tego pytania ”).

Andy Turner
źródło
Dobra uwaga, zapomniałem o uprawnieniach do plików w systemie Linux! Minimalne użycie dostępnych bitów ... octal pasuje do rachunku.
sarlacii
1
@sarlacii „minimalne użycie” nie ma z tym nic wspólnego, „ósemkowa” int literał istnieje tylko w kodzie źródłowym. Łatwiej jest poszukać uprawnień oznaczonych literałem ósemkowym, ponieważ cyfry bezpośrednio odpowiadają użytkownikowi, grupie i innym.
Andy Turner,
Pierwsze programowanie zrobiłem na komputerze mainframe, który miał 60 bitów słów i 6 bitów zestawu znaków. Adresy miały 18 bitów. Oczywiście użyliśmy ósemki. Kiedy po raz pierwszy spotkałem się w systemie szesnastkowym, dość osobliwym było widzieć litery w liczbach.
Ole VV
@Andy nadal uważam to za minimalne użycie ... wybór długości bitów jest nie tylko związany z kodem. Jest również ograniczony zasobami. na przykład. Mógłbym użyć 8 bitów do zakodowania każdego uprawnienia, maskując niewykorzystane bity, wymagające 3 bajtów, a raczej użyj minimum 3 bitów, a następnie zakoduj liczby ósemkowe, aby użyć tylko 1 i pół bajtu (używając czwartego nieco lepki). Ale tak, jest to arbitralne, kiedy przejdziesz do poziomu bitowego ... ponieważ możesz odczytać połączoną wartość ósemkową jako szesnastkową.
sarlacii
7

„Liczby ósemkowe nie są tak powszechne, jak kiedyś. Jednak liczba ósemkowa jest używana, gdy liczba bitów w jednym słowie jest wielokrotnością liczby 3. Jest również używana jako skrót do reprezentowania uprawnień do plików w systemach UNIX i reprezentacji Numery UTF8 itp. ”

Od: https://www.tutorialspoint.com/octal-number-system

twój
źródło
3
Niezupełnie „liczba bitów w słowie” - jak używano na 16-bitowych minikomputerach w postaci wysokiego bitu 0/1, a następnie 5 liczb ósemkowych. Lepszym opisem może być: Używany, gdy wielkość pola w słowie jest wielokrotnością 8 bitów. Te same komputery miały (często) 8 rejestrów - więc rejestr określony w instrukcji miałby 3-bitowe pole do nazwania rejestru, instrukcja rejestr-rejestr miałaby dwa takie 3-bitowe pola; te same komputery często miały 3-bitowy kod operacyjny lub 3-bitowy kod operacyjny z „ucieczką” (np. 0111) do 6-bitowego kodu operacyjnego; itd. itd.
davidbak
4

Historycy informatyki (nauki). Aby przedstawić grupę bitów, podstawa 10 nie pasuje, podstawa 8 = 2 3 dla 3 bitów, a podstawa 16 = 2 4 dla 4 bitów lepiej pasuje.

Zaletą podstawy 8 jest to, że wszystkie cyfry to tak naprawdę cyfry: 0-7, podczas gdy podstawa 16 ma „cyfry” 0-9A-F.

Dla 8 bitów bazy bajtów 16 (szesnastkowy) jest lepszym dopasowaniem i wygrał. W systemie uniksowym ósemkowym base 8 często nadal jest używanyrwx bit (odczyt, zapis, wykonanie) dla użytkownika, grupy i innych; stąd liczby ósemkowe, takie jak 0666 lub 0777.

Szesnastkowy jest wszechobecny, nie tylko dlatego, że rozmiary słów komputerów w dzisiejszych czasach są wielobajtowe. To, że 8 bitów bytestało się standardem, to inna, trudna historia (2 3 bity i adresowanie).

Joop Eggen
źródło
0

Oryginalna odpowiedź na pytanie „Do czego służą liczby ósemkowe (podstawa 8)?”

Wspólne użycie Octal

  • Jako skrót binarny: przypadku maszyn komputerowych (takich jak UNIVAC 1050, PDP-8, ICL 1900 itp.), Octal został użyty jako skrót binarny, ponieważ ich rozmiar słowa jest podzielny przez trzy (każda cyfra ósemkowa reprezentuje trzy binarne cyfry). Tak więc dwie, cztery, osiem lub dwanaście cyfr może zwięźle wyświetlać całe słowo maszynowe. Zmniejszyło to również koszty, umożliwiając stosowanie lamp Nixie, wyświetlaczy siedmiosegmentowych i kalkulatorów do konsol operatorskich, w których wyświetlacze binarne były zbyt skomplikowane, by używać ich, wyświetlacze dziesiętne wymagały złożonego sprzętu do konwersji rad, a wyświetlacze szesnastkowe potrzebne do wyświetlania większej liczby .

  • Reprezentacja słów 16-, 32- lub 62-bitowych:Wszystkie współczesne platformy komputerowe używają 16-, 32- lub 64-bitowych słów, podzielonych dalej na osiem-bitowe bajty. W takich systemach wymagane byłyby trzy cyfry ósemkowe na bajt, przy czym najbardziej znacząca cyfra ósemkowa reprezentowałaby dwie cyfry binarne (plus jeden bit następnego znaczącego bajtu, jeśli taki istnieje). Oktalowa reprezentacja 16-bitowego słowa wymaga 6 cyfr, ale najbardziej znacząca cyfra ósemkowa reprezentuje (dość nieelegancko) tylko jeden bit (0 lub 1). Ta reprezentacja nie pozwala w łatwy sposób odczytać najbardziej znaczącego bajtu, ponieważ jest rozmazana na czterech cyfrach ósemkowych. Dlatego w dzisiejszych językach programowania szesnastkowy jest częściej używany, ponieważ dwie cyfry szesnastkowe dokładnie określają jeden bajt. Niektóre platformy z potęgą dwóch słów wciąż mają podrzędne słowa instrukcji, które są łatwiejsze do zrozumienia, jeśli są wyświetlane ósemkowo; obejmuje to PDP-11 i rodzinę Motorola 68000. Współczesna, wszechobecna architektura x86 również należy do tej kategorii, ale na tej platformie rzadko używa się ósemki.

  • Opisy kodowania: Pewne właściwości binarnego kodowania opcodów we współczesnej architekturze x86 stają się bardziej widoczne, gdy są wyświetlane w postaci ósemkowej, np. Bajt ModRM, który jest podzielony na pola 2, 3 i 3 bity, więc ósemkowy może być przydatny w opisie te kodowania.

  • Obliczenia i dostęp do plików Uprawnienia: Oktal jest czasem używany w obliczeniach zamiast szesnastkowy, być może najczęściej w czasach współczesnych w połączeniu z uprawnieniami do plików w systemach uniksowych (w dostępie uprawnień do chmod). Ma tę zaletę, że nie wymaga żadnych dodatkowych symboli jako cyfr (system szesnastkowy to podstawa 16, a zatem potrzebuje sześciu dodatkowych symboli poza 0–9).

  • Wyświetlacze cyfrowe: Liczby ósemkowe są również używane do wyświetlania treści cyfrowych na ekranie, ponieważ ma mniejszą liczbę symboli używanych do reprezentacji.

  • Graficzna reprezentacja ciągów bajtów: Niektóre języki programowania (C, Perl, Postscript, itp.) Mają reprezentację tekstów / grafiki w Octal z znakami ucieczki jako \ nnn. Reprezentacja ósemkowa jest szczególnie przydatna w przypadku bajtów UTF-8 innych niż ASCII, które kodują grupy 6 bitów i gdzie każdy bajt początkowy ma wartość ósemkową \ 3nn, a dowolny bajt kontynuacyjny ma wartość ósemkową \ 2nn.

  • Wczesna arytmetyka zmiennoprzecinkowa: Octal był również używany do obliczeń zmiennoprzecinkowych w Atlasie Ferranti (1962), Burroughs B5500 (1964), Burroughs B5700 (1971), Burroughs B6700 (1971) i Burroughs B7700 (1972).

  • W transponderach: statek powietrzny przesyła kod, wyrażony jako czterocyfrowa liczba, gdy jest zapytany przez radar naziemny. Ten kod służy do rozróżniania różnych samolotów na ekranie radaru.

Dalsze lektury: https://en.wikipedia.org/wiki/Octal

Jishan Shaikh
źródło
1
Z przyjemnością przeczytałem wpis w Wikipedii, zwłaszcza trochę na temat liczenia odstępów między palcami. Jednak w przeważającej części można powiedzieć, że artykuł jest impulsem do mojego pytania. Jak podejrzewałem, niepodzielność rozmiarów słów używanych w obecnej architekturze komputerowej sprawia, że ​​ósemkowa reprezentacja nie jest przydatna, a jeden z akapitów, które cytujesz jako „16-, 32-, 64-bitowe słowa…” wcale nie jest jasny. Czy mógłbyś wyjaśnić, jak „najbardziej znaczący bajt jest rozmazany ponad cztery cyfry ósemkowe” i „Niektóre platformy z potęgą dwójki rozmiar słowo jeszcze instruktażowe subwords ...”
jokinjo