Właśnie uderzyłem głową o stół przez około 20 minut, patrząc na całkowicie dziwny błąd w PHP, a potem zdałem sobie sprawę, że jest ósemka. Oktal <% (* i #>).
Krótko mówiąc, uzupełniałem literały zerami, aby kod był wyrównany, wiem, wielki błąd. Zapomniałem o ósemkach.
Pytanie brzmi: czy ktoś używa liczb ósemkowych do celów innych niż uprawnienia do plików? (Osobiście wolę, chmod ugo+rwx
ale rozumiem, że jeśli muszą być generowane programowo, warto używać ósemek.) Ale czy są przydatne w jakiejkolwiek innej sytuacji?
0o
prefiks (co jest zgodne z0x
a0b
, ale może trochę trudne do odróżnienia od00
). A od Python 3 dodatkowe zera wiodące są błędem składniowym, aby zapobiec tego rodzaju błędom.Odpowiedzi:
Według Wikipedii ósemki nie są tak powszechne, jak kiedyś. Jak już wspominali inni, w przeszłości systemy posiadały słowo 12/24/36-bitowe, które jest łatwiej reprezentowane w formacie ósemkowym niż szesnastkowym, ale obecnie architektury x86 i i64 używają bitów 16/32/64 słowo, które jest łatwiej reprezentowane w systemie szesnastkowym, a wręcz brzydkie w formacie ósemkowym.
Obecne zastosowania obejmują jednak:
\3nn
dowolny bajt kontynuacyjny\2nn
)0
w jakimś języku programowania obsługującym ósemki, jak napisał ten użytkownik .Zauważ, że współczesne języki programowania czasami nie obsługują już ósemek z powodu braku przypadków użycia i potencjalnego błędu. C # jest przykładem, jak napisał to Eric Lippert w trzeciej i czwartej edycji TCPL :
Powiązany, a jedynie dla odniesienia i ciekawości, Code, The Hidden Language of Computer Hardware ma doskonałe, łatwe do naśladowania objaśnienie liczb ósemkowych i innych systemów liczbowych na stronie 55 - 63 .
źródło
parseInt(011)==9
Octal był szeroko używany około 50 lat temu przez Digital Equipment Corp. (DEC) i inne firmy, które miały komputery z 12-bitowym słowem (np. PDP-8) lub innymi wielokrotnościami sześciu, takimi jak 18 i 36 (np. UNIVAC 1108 ). Używałem zarówno PDP-8, jak i UNIVAC 1108 w szkole podstawowej. Znaki na obu maszynach zwykle używały sześciu bitów, a nie 8.
Format instrukcji PDP-8 - zauważ, że bity są ponumerowane 0 -> 11. Bit 0 był MSB (najbardziej znaczący bit).
Kiedy DEC wyszedł z 16-bitowym PDP-11, nadal używali liczby ósemkowej w swojej dokumentacji zamiast szesnastkowej, jak używali inni producenci minikomputerów, oferując wówczas 16-bitowe maszyny. Prawdopodobnie wynikało to z wielu 3-bitowych pól w formatach instrukcji PDP-11, takich jak Register, Mode i Src / Dest, które nadawały się do dekodowania jako cyfra ósemkowa. (Podziękowania dla Johna Strohm za zwrócenie na to uwagi.)
Co ciekawe, kiedy Motorola wyszła ze swoim mikroprocesorem 68000, na który PDP-11 miał duży wpływ i miał w instrukcji te same 3-bitowe pola Trybu i Rejestru, zdecydował się używać w swojej dokumentacji tylko szesnastkowego.
Ponieważ PDP-11 używał notacji ósemkowej, oryginalne kody uprawnień dla Uniksa, które po raz pierwszy pojawiły się na PDP-11, również używały liczby ósemkowej. To dziedzictwo utrzymuje się w Linuksie, gdzie komenda chmod nadal używa ósemki do określenia każdego z trzech bitowych pól „rwx”.
Więcej ciekawostek - CompuServe, która była szeroko stosowaną telefoniczną usługą telefoniczną w latach 80. i na początku lat 90. (zanim została przyćmiona przez AOL), działała na minikomputerach DEC, przynajmniej pierwotnie. Wszystkie identyfikatory użytkownika były numeryczne iw pewnym momencie zauważyłem, że nigdy nie zawierały żadnych 8 lub 9, więc były ósemkowe. Mój stary identyfikator CIS to 70205.
źródło
Heathkit użył ich na panelu przednim swojego H-8 oraz na liście języków asemblera swojego oprogramowania na panelu przednim (zwanym PAM-8). Umawiam się, wiem.
W dzisiejszych czasach ósemki są bardzo rzadkie; wszyscy wydają się używać hexa. Ale liczby wciąż wyglądają jak liczby ósemkowe i nie potrzebujesz dodatkowego rzędu klawiszy dla cyfr od A do F.
źródło
Jednym z powodów, dla których octal widzi użycie, jest to, że jest to największa baza, która jest potęgą 2, dla której nie potrzebujesz żadnych znaków specjalnych - to znaczy, że wszystkie cyfry mogą być numeryczne. Baza 16 (następna w górę od bazy 8) wymaga cyfr nienumerycznych (zwykle A, B, C, D, E, F).
źródło
Używam ósemki na co dzień. Za każdym razem, gdy muszę przeskoczyć do pliku, używam ósemki (wcześniej zapisuję notację u + r ...). Za każdym razem, gdy chcę osadzić znak kontrolny w ciągu, używam ósemki ... (Tak, mógłbym użyć szesnastki, ale używam ósemki).
źródło
Każdy, kto musi wyrazić kombinacje bitów zgrupowanych w trójki.
Dlaczego ktoś używa hexa?
Rzeczy z czubka mojej głowy, które są wyrażone jako liczby ósemkowe:
ncurses
biblioteceźródło
7 * 6
czy07 * 06
? Używamy dziesiętnych do reprezentowania liczb, ponieważ potrafimy je najlepiej obsługiwać, a szesnastkowych do reprezentowania liczb bardzo zbliżonych do sposobu, w jaki maszyna je przechowuje. I często to robimy. Ta strona jest pełna dowodów na to.Kiedy pracowałem na komputerach mainframe CDC (z 60-bitowym słowem, 12-bitowym słowem dla PPU), wszystkie zrzuty rdzenia i takie były wykonywane ósemkowo (20 cyfr ósemkowych na słowo, 4 na słowo PPU).
źródło
Podobnie jak w systemie szesnastkowym, notacja ósemkowa jest czasami używana do określania kodów znaków. Może być przydatny z tego samego powodu, dla którego szesnastkowy jest: jest bardziej kompaktowy niż binarny, ale bardzo łatwo go przełożyć na binarny w twojej głowie.
źródło
Podobnie jak Hex, liczby ósemkowe można łatwo przekonwertować z formatu binarnego. Po prostu zgrupuj cyfry binarne w trzyosobowe grupy, zaczynając od prawej.
źródło
Nie. Nigdy ich nie użyłem. Nawet do ustawiania uprawnień do plików, ponieważ robię to tak rzadko, że trudno mi je odczytać.
Więc tak, istnieje oczywista korzyść z konwersji zi na binarną.
Jednak, jak już wskazał @Mason, hex jest znacznie bardziej „naturalny”, ponieważ 2 cyfry hex tworzą jeden bajt. Przydaje się do reprezentowania 24/32 bitowych kolorów RGB / ARGB, adresów IP, masek bajtów itp. Oktal po drugiej stronie nie jest tak naprawdę praktyczny, ponieważ rzadko masz scenariusze, w których pracujesz w grupach 3-bitowych.
Uprawnienia do plików to tak naprawdę jedyna rzecz, o której mogłem pomyśleć. A jeśli na razie nie ma obszaru zastosowania, wątpię, by kiedykolwiek istniał. Ponieważ w ciągu ostatnich 20 lat przestrzeń stała się tak tania, bardzo rzadkie stało się tak ścisłe pakowanie informacji, kosztem dostosowania, łatwości użytkowania i rozszerzalności.
źródło
Trochę na bok, ale publiczny użytek znajduje się w londyńskim metrze. Każdy pociąg ma zarówno fizyczną tożsamość, jak i oddzielną tożsamość w rozkładach jazdy, która jest wyświetlana podczas eksploatacji - patrz tutaj: https://upload.wikimedia.org/wikipedia/commons/4/49/LUL-S-Stock-at -Watford.jpg (zwróć uwagę na 402 u góry ekranu docelowego). Chociaż elektronika wyświetlaczy jest oparta na standardowym formacie dziesiętnym, nigdy nie widać cyfr 8 lub 9, ponieważ są one powiązane ze starszym sprzętem opartym na oktale w systemie sygnalizacyjnym.
źródło