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.
Odpowiedzi:
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
,0644
itd.(Wrażliwa odpowiedź na pytanie, dlaczego jest obsługiwany, brzmi: „uzyskać pozytywne opinie na temat tego pytania ”).
źródło
„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
źródło
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żywany
rwx
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
byte
stało się standardem, to inna, trudna historia (2 3 bity i adresowanie).źródło
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
źródło