Po co uczyć się w systemie szesnastkowym? [Zamknięte]

28

W ciągu dnia wziąłem kilka zajęć z programowania wstępnego, głównie po to, by zmoczyć stopy w każdym rodzaju programowania, jaki znajduję. Nic dziwnego, że prawie każda klasa przebiega w tym samym formacie: wprowadzenie do sprzętu, wprowadzenie do oprogramowania, a następnie przejście do faktycznego programowania. Chociaż zrozumienie, jak działa sprzęt i oprogramowanie, jest bardzo ważne, zawsze byłem zdezorientowany jednym tematem, który był na każdym kursie.

W części wstępnej do oprogramowania, które znalazłem, bez wątpienia zawsze kładą duży nacisk na umiejętność czytania w systemie dwójkowym, szesnastkowym, a czasem nawet ósemkowym. Rozumiem, że dobrze jest zrozumieć, co to są i jak komputer by je zinterpretował, ale tak naprawdę nigdy nie musiałem wiedzieć, jak czytać i pisać w tych systemach liczbowych. Naprawdę, jedyny raz, kiedy widziałem coś innego niż baza 10, dotyczy kolorów w CSS, co jest jeszcze łatwiejsze, jeśli używasz czegoś takiego jak www.colorpicker.com

Czy właśnie nie byłem świadomy cudownych zastosowań tych systemów liczbowych innych niż 10 w świecie programowania, czy to tylko stara tradycja umieszczania tych sekcji we wszystkich podręcznikach programowania? Czy ktoś ma dobry przykład, gdzie przeciętny programista użyłby liczby ósemkowej?

jwegner
źródło
1
Czy ktoś ma dobry przykład, gdzie przeciętny programista użyłby liczby ósemkowej? Tak, jeśli kiedykolwiek zdarzy ci się pisać oprogramowanie związane z przemysłem lotniczym, prawdopodobnie napotkasz kody transponderów, które są 4-cyfrową liczbą ósemkową. en.wikipedia.org/wiki/Transponder_%28aviation%29
Ben Cottrell

Odpowiedzi:

14

Wszystkie odpowiedzi są dobre, ale nie odnoszą się do tego, co uważam za najcenniejszą część. Nauka „Myślenia” w różnych podstawach pozwala na płynniejsze posługiwanie się cyframi przez komputery.

Jeśli chciałbyś dość dobrze zapakować ciąg małych liter, jak byś to zrobił?

Cóż, jest 26 małych liter, które łatwo przekładają się na zakres 0-31, który jest 5-bitową liczbą, możesz spakować 6 5-bitowych liczb w 32-bitowe pole (int?), A nawet mieć dość za kilka znaków interpunkcyjnych.

Nie twierdzę, że hex pomaga w takich rzeczach, ale zrozumienie, jak działa konwersja liczb.

Kolejny przypadek, za każdym razem używasz base-64 do przekazywania nieco długich liczb w ascii. Czy wiesz, jak to wdrożyć? Po co to wdrażać? Czy zdajesz sobie sprawę, że to właśnie wpisujesz za każdym razem, gdy wpisujesz „KLUCZ CD” w polu rejestracyjnym gry?

Ponadto, dla zabawy, baw się przez chwilę z bazą 12. Matematyka okazuje się naprawdę interesująca w bazie 12 (baza 10 jest głupia w porównaniu, szkoda, że ​​nie ewoluowaliśmy 6 palcami - moglibyśmy być dziesięcioleci w rozumieniu matematyki). Niektórzy bardzo mądrzy wcześni ludzie używali podstawy 12 do opracowania zegara.

W bazie 10 mamy 3 „fajne” liczby, które tworzą łatwe wzory, 2, 5 i 9 z 8, 6 i 4 jako „mniejsze” chłodne liczby. W bazie 12 masz 2,3,4,6,11 jako „fajne” liczby z 8,9, a 10 jako „mniejsze” fajne liczby, co oznacza, że ​​gdybyśmy użyli podstawy 12, znacznie lepiej rozpoznalibyśmy wzorce liczbowe ponieważ będziemy je widzieć cały czas.

Również binarne. Możesz liczyć na jedną rękę do 32 - robię to całkiem sporo, przydaje się czasem, gdy liczenie do 5 po prostu tego nie wycina :)

Binary to świetna zabawa, ale po prostu źle się tłumaczy. Kiedy dobrze sobie radzisz z hexem, zaczynasz widzieć „A” jako 1010 i „5” jako 0101, a te rzeczy naprawdę zaczynają mieć znaczenie. Jeśli masz pole bitowe, z którego chcesz wyodrębnić bit 6: 00100000, czym „i” to używasz? Powinieneś tylko wiedzieć, że to 0x20.

Jeśli widzisz kod, który ma coś 0x0600, które bity są wydobywane? Powinieneś wiedzieć, nawet o tym nie myśląc - powinieneś przeczytać to tak, jakby to było napisane 0000011000000000 (ale łatwiejsze do odczytania, ponieważ nie musisz liczyć zer).

Dlaczego miałbyś chcieć ograniczyć swój mózg i jego zdolność do przetwarzania danych?

Bill K
źródło
W rzeczywistości zegary zostały opracowane w bazie60 .
Denis de Bernardy
@Denis Miałem wrażenie, że obecna teoria głosi, że zostały opracowane przez ludzi, którzy liczyli w bazie dwunastej, którzy przegrali z głupszymi ludźmi, którzy nie mogli myśleć, że przeszli przez palce. 60 to tylko 12 dywizji podzielonych dalej na grupy po 5 i wygląda na to, że po hacku bazowe 10 chrząka :)
Bill K
Może być. Szczerze mówiąc, nie jestem specjalistą. Twój komentarz przywrócił tylko dawno zapomniane wspomnienia. Przypominam sobie również, że kąty mierzone w 360 stopniach pochodzą od podstawy 60 (i tym samym przez tych samych babilońskich wynalazców), ale jak zauważacie, być może pomruki podstawy 10 po prostu przytłoczyły to, co pierwotnie było matematykami z podstawy 12. :-) Teraz wyobraź sobie, że liczymy w bazie 20, jak niektórzy amerykańscy indianie. :-D
Denis de Bernardy
44

Czego się uczyć? Musisz być w stanie zrozumieć różne podstawy liczb, aby być kompetentnym programistą, ale jeśli chodzi o liczbę szesnastkową, niewiele trzeba się nauczyć, poza tym, że ABCDEF występuje po 9.

Neil Butterworth
źródło
8
OP może odnosić się do zdolności do mentalnej transpozycji do bazy 10 z innych baz. To może być przydatna umiejętność w pewnym momencie i może nadal dotyczyć pewnej kategorii programistów niskiego poziomu, ale dzisiaj jest w dużej mierze nieistotna. Na przykład możesz wykonać konwersję w vimie.
Rein Henrichs,
To jest poprawne. Powinienem być bardziej dokładny.
jwegner
2
@ Rein Nigdy nie byłem w tym dobry (muszę robić matematykę w głowie), więc nie mogę powiedzieć. Kiedyś jednak mentalnie mogłem transponować z hexa na język asemblera Z80, co było wtedy bardzo przydatne. Podejrzewam, że możliwość transpozycji z hexa na asembler 80x86 (lub cokolwiek innego) jest nadal przydatna dla programistów pracujących dzisiaj.
Neil Butterworth,
1
@Neil Butterworth: 8080 kodów jest bardziej sensowne, patrząc ósemkowo, jeśli pamięć służy. Moja pamięć jest naprawdę mglista, jeśli chodzi o sposób, w jaki dotyczyło to rozszerzeń Z80.
David Thornley,
1
@Neil: Myślę, że znaczącą część stanowiły instrukcje przenoszenia rejestru do rejestru, które wyglądają na 01xxxyyy w formacie bitowym, gdzie xxx jest miejscem docelowym i źródłem yyy. Nie wiem, czy jest jakieś inne znaczenie ósemkowe.
David Thornley,
18

Czy ktoś ma dobry przykład, gdzie przeciętny programista użyłby liczby ósemkowej?

Oktal? Nie ogólnie nie, z wyjątkiem uprawnień * nix.

Szesnastkowy? Stawiasz zakład Ignorujesz dość dużą liczbę z nas, którzy przemieszają bity wokół systemów osadzonych, patrząc na protokoły lub formaty plików na nieco wyższym poziomie, i tak dalej. Ale oczywiście, jeśli jesteś daleko od metalowej aplikacji lub pracy w sieci, możesz uciec od tego łatwiej.

Przykład: rejestracja konfiguracji na mikrokontrolerach i tym podobnych.

Weź liczbę 54312, którą losowo wybijasz klucze. Czy możesz powiedzieć, które bity są ustawione? Nie mogę, przynajmniej nie z czubka głowy. Ekwiwalent szesnastkowy to 0xd428.Żez drugiej strony, od razu mówi mi, że wzorzec bitów, na który patrzę, to 1101 0100 0010 1000. Jest bardziej logicznie skonstruowany dla tego rodzaju rzeczy, a ty potrzebujesz tego przez cały czas, gdy jesteś blisko metal. Powiedzmy, że powyższą liczbę otrzymuję po zresetowaniu z MCU i że z jakiegoś powodu potrzebuję ustawić bity 7 i 9. W zapisie szesnastkowym łatwo mogę zobaczyć, że wynikowa liczba powinna wynosić 0xd6a8, ale dziesiętnie? To 54952, co nie jest tak intuicyjne, jeśli mnie zapytasz. Jasne, to kwestia dodania 640 do wartości, ale trudniej jest to rozgryźć. Oczywiście w praktyce można po prostu przesunąć bity do właściwej pozycji i LUB z oryginalną wartością, ale nadal możesz chcieć wiedzieć, jaka jest ostateczna reprezentacja.

n42
źródło
1
Który rodzaj pytania powoduje pytanie „dlaczego mam się przejmować, które bity są ustawione?” W przypadku niektórych (wielu? Większości?) Aplikacji nie ma to znaczenia.
Neil Butterworth,
10
Zgoda - zakładając, że mówimy o rozwoju na wysokim poziomie. Niski poziom, czy dany bit jest ustawiony lub wyczyszczony nie tylko może, ale będzie czasami ustalić, czy krwawe mikro buty w ogóle, czy pewna obwodowych trzeba dostaje władzę, czy też pracuje z taktowaniem x zamiast y . To dopiero początek, a jeśli zajmujesz się tego rodzaju rozwojem, w zasadzie pojedyncze bity mają znaczenie. Czasem dużo. Ale znowu, to zależy od twojej domeny, mówię tylko; Nie zapomnij o osadzonym świecie. =)
n42
1
+1 - im bliżej maszyny, tym więcej musisz użyć różnych baz. To nie tylko osadzone; większość języków ma flagi bitowe i często są napisane szesnastkowo z oczywistych powodów. I odwrotnie, nauczanie na pierwszym kursie programowania jest raczej bezcelowe, ale wtedy większość pierwszych kursów programowania jest bezcelowa. Prawie wszyscy programiści uczą się, prawda?
1
@Davor: To dlatego, że hex jest łatwiejszy do odczytania. Potrafię zrozumieć 8-cyfrową wartość szesnastkową znacznie szybciej niż 32-cyfrową wartość binarną.
Steve S
2
@ Steve S: Szczerze mówiąc, podejrzewam, że to dlatego, że jesteśmy też leniwymi bandami. 0x80 jest krótszy do napisania niż 0b10000000. Ale zgadzam się. Zgadzam się również, że jest to w dużej mierze bez znaczenia na pierwszym kursie programowania, ale możesz przełożyć je na dyskretne matematyki, programowanie w czasie rzeczywistym, organizację komputerów i tym podobne.
n42,
12

Czy ktoś ma dobry przykład, gdzie przeciętny programista użyłby liczby ósemkowej?

Jeśli ustawiasz uprawnienia do pliku w systemie Unix (lub Linux), używasz 3-cyfrowej liczby ósemkowej. Pierwsza cyfra to uprawnienia użytkownika, druga to uprawnienia grupy, a ostatnia cyfra to uprawnienia, które otrzymują wszyscy inni.

Musiałem zrozumieć ten fakt w kodzie, który napisałem w zeszłym tygodniu.

Jeśli spojrzysz na dane wyjściowe standardowych algorytmów mieszających, takich jak MD5, często znajdziesz je zapisane szesnastkowo. Widziałem wiele przypadków, w których prowadzi to do arytmetyki w nietypowych podstawach.

Jeśli chcesz zrozumieć, w jaki sposób zmiennoprzecinkowa jest reprezentowana wewnętrznie, a zatem dlaczego 1/10 nie jest dokładnie reprezentowana, musisz absolutnie zrozumieć, jak wykonywać arytmetykę w różnych podstawach. Jest to wiedza ezoteryczna do dnia, w którym cię ugodzi w tył i nagle musisz ją szybko zrozumieć.

Istnieje mnóstwo innych przypadków, w których można znaleźć podstawową binarną naturę danych wewnątrz komputerów. Oczywiście, jeśli piszesz tylko stronę CRUD, prawdopodobnie nigdy nie spotkasz żadnej z nich, ponieważ dzieje się to na poziomach, z którymi ktoś inny już miał do czynienia.

btilly
źródło
4
* Uprawnienia nix nie są prawdziwe ósemkowe. Nie wykonujesz obliczeń matematycznych z tymi reprezentacjami. W najlepszym razie są to ósemkowe przedstawienia maski binarnej.
Joel Etherton,
@Joel Etherton: Gdy uzyskasz uprawnienia ze statystyki pliku, pojawią się one jako liczby, które domyślnie będą wyświetlane w bazie 10. Jeśli nie rozumiesz konwersji na format ósemkowy, liczby te są trudne do zrozumienia. Pisałem dokumentację, która musiała wyjaśnić ten fakt. Było wiele obliczeń matematycznych.
btilly
@btilly: Nie rozumiesz, co mówię. Jeśli ustawisz uprawnienia do pliku na 755, nie będziesz musiał dodawać tego do niczego. To tylko maska ​​opisująca kombinacje uprawnień. Pewnie musisz rozpoznać, że to oznacza (4 + 2 + 1) (4 + 0 + 1) (4 + 0 + 1), ale wciąż są to tylko reprezentacje maski binarnej. O czym mówisz, kiedy mówisz „stat file”? Nigdy nie widziałem statystyki pliku dla uprawnień dostarczonych w bazie 10 (ściśle przestrzegając tego przykładu).
Joel Etherton,
1
@Jel Etherton: Spróbuj, perl -le '@stat = stat(shift); print $stat[2]' some_filea dostaniesz statystykę jako liczbę w bazie 10. Musisz przekazać ją Perlowi chmodw ten sam sposób. Dlatego sensowne jest przechowywanie liczby w ten sposób w bazie danych, w którym to momencie muszę udokumentować, co te liczby mają wspólnego z bardziej znanymi uprawnieniami uniksowymi. Jak powiedziałem, nie był to hipotetyczny przykład.
btilly,
@Jel Etherton: powiedz, że masz plik, którego uprawnienia wynoszą 419 (dziesiętnie), chcesz, aby plik był wykonywalny przez użytkownika, ale nie można go odczytać na całym świecie. Jak musisz zmodyfikować numer? Wartość zwracana w wywołaniu C stat () jest liczbą całkowitą, a sposób drukowania jest inną sprawą.
Vatine
9

Mamy nadzieję, że w prawdziwym świecie konwersja heksadecymalnej na binarną na dziesiętną nie będzie ci przeszkadzać. Będziesz miał do dyspozycji narzędzia do konwersji w dowolny sposób.

Zgadzam się, że powinieneś rozumieć, co się dzieje, ale po co zapamiętywać, kiedy możesz to sprawdzić?

Uważam jednak, że warto zapamiętać numery kluczy (dla mnie 0x64 = 100, 0xFF = 255, 0xFFFF = 65535 itp.), Ponieważ często się pojawiają.

Czy mogę oderwać to, co 8675309 jest w formacie binarnym, szesnastkowym i ósemkowym? Nie, ale mogę otworzyć narzędzie, które może, kiedy trzeba.

Dylan Jaga
źródło
3
Zapomniałeś 57005, powszechnie używanego jako constelvis = 57005;
Bevan
5

Jedyną rzeczą, z której kiedykolwiek korzystałem ósemkowy, są uprawnienia do plików w systemach uniksowych.

Szesnastkowy i binarny są bardzo przydatne, jeśli wykonujesz jakąkolwiek pracę z protokołami przewodowymi lub w pobliżu metalowego transferu danych. Zasadniczo dane przepływają w formacie binarnym, który jest w uproszczeniu reprezentowany jako szesnastkowy naraz.

Przekonasz się również, że arkusze danych często podają wartości szesnastkowe, więc lepiej jest wyświetlać wartość w kodzie, tak jak pojawia się w arkuszu danych.

Jeśli użyjesz któregoś z nich dużo, skończysz dość biegle w konwersji do i po przecinku w twojej głowie, przynajmniej dla wspólnych wartości.

Wszystko, co powiedział; Podejrzewam, że duży nacisk jest głównie historyczny. Jak mówisz, jest wielu programistów, którzy nie potrzebują niczego poza dziesiętnymi.

Luke Graham
źródło
5

W rzeczywistości pytasz, dlaczego uczyć się potęgi 2 reprezentacji liczbowych?

Komputery są zbudowane z obwodów , prąd elektryczny przepływa przez obwody na dwóch różnych poziomach, wysokim i niskim, aby reprezentować dwa poziomy prądów, używamy cyfr binarnych, ponieważ mogą one pomieścić dwa stany, jeden (wysoki) lub zero (niski).

Cyfry binarne tworzą wzory . Na przykład, jeśli jedynym sposobem, w jaki ty i ja możemy rozmawiać, jest wyjście z obwodu, możemy ustalić, że jeśli chcesz wysłać mi list A, wyślesz mi wzór binarny: 1000001. Ponieważ jestem leniwy , Nie chcę zapamiętywać 7 siedmiu cyfr. Zamiast tego użyję potęgi systemu numeracji 2 do przedstawienia dużych cyfr binarnych na mniejszy. Mogę użyć 8 (2 ^ 3) lub 16 (2 ^ 4).

Jak widać, większość sprzętu i oprogramowania komputerowego używa reprezentacji binarnej, a my ludzie używamy mocy 2 reprezentacji, takich jak ósemkowa i szesnastkowa, aby odczytać reprezentację binarną w bardziej wydajny i bezbolesny sposób.

Teraz przykład przeciętnego programisty, który musi zrozumieć moc 2 reprezentacji:

  1. ASCII
  2. Unicode
  3. Zrozumienie programowania zarządzania pamięcią (stos, stos, adresy pamięci, zrzuty pamięci)
  4. Debugowanie
  5. Odczytywanie danych binarnych odbywa się głównie w edytorze szesnastkowym.

Teraz moje ostatnie dwa centy, jestem bardzo pewny, że możesz dość szybko nauczyć się dowolnej potęgi 2 reprezentacji (ponieważ już zarządzałeś kursami programowania wstępnego). Możesz zapomnieć o konwersji, ale nie powinna to być obca koncepcja, jeśli chcesz być przeciętnym programistą.

Armando
źródło
3

Nigdy nie używałem ósemki, ale nie jest niczym niezwykłym, aby zobaczyć hex w debuggerze i czasami bardziej sensowne jest użycie hexa w kodzie źródłowym (normalnie, ponieważ bazowymi danymi są flagi bitowe).

Loren Pechtel
źródło
3

Nie wiem, czy w dzisiejszych czasach jest taka potrzeba, ale wiele lat temu, kiedy byłem programistą systemów, umiejętność czytania i rozumienia hex była niezbędna. Zostanie mi przedstawiony zrzut pamięci (wszystkie w formacie szesnastkowym) i dekodowanie reprezentacji szesnastkowej z powrotem do języka asemblera IBM. Po zrobieniu tego przez pewien czas możesz to zrobić bezpośrednio - przeczytaj hex i napisz ekwiwalent zestawu. Bardzo przydatny do debugowania. Dodawanie i odejmowanie wartości szesnastkowych było przydatne do obliczania przesunięć z rejestrów podstawowych.

Podejrzewam, że w praktyce jest to mało potrzebne, ale znajomość tego nie może być złą rzeczą.

Simon Knights
źródło
Tam też nabyłem swoje umiejętności heksowe. Później zaostrzono, gdy byłem zmuszony debugować kod bez symbolicznego debugera w VAX / VMS (wysyłaliśmy kod do klientów bez żadnych informacji o symbolach). Obecnie rzadko go używam, chociaż kodujemy niektóre informacje w niektórych adresach URL w postaci heksadecymalnej, i od czasu do czasu pomocne jest ich dekodowanie w locie.
TomG
3

Nie chodzi o to, by być „biegłym” w czytaniu liczb binarnych / szesnastkowych, ale na tyle wygodnym, że można szybko dokonać mentalnej konwersji, gdy je napotkasz. Wyobraź sobie, że programowanie nie jest wygodne z prostą arytmetyką i trzeba było iść do kalkulatora za każdym razem, gdy trzeba było pomnożyć przez dwa.

Szesnastkowy / binarny jest ważny, ponieważ jest to język, w którym mówią komputery. Niezmiennie można go spotkać w różnych miejscach, szczególnie podczas wykonywania zadań debugowania, a dane są w postaci szesnastkowej.

Chciałbym również podkreślić znaczenie zrozumienia podstawy 2 w kontekście wewnętrznego reprezentowania różnych typów liczbowych i działania arytmetyki. Dzięki temu będziesz w stanie lepiej zrozumieć, kiedy i jak radzić sobie na przykład z problemami z zaokrąglaniem liczb zmiennoprzecinkowych i przepełnieniem liczb całkowitych.

Jako jeszcze jeden przykład, operacje bitowe i flagi bitów są nadal dominujące w programowaniu, i jest to kolejne miejsce, w którym ważne jest zrozumienie zasady base-2.

Scott Wegner
źródło
2

Naprawdę, jedyny raz, kiedy widziałem coś innego niż baza 10, dotyczy kolorów w CSS,

Nigdy nie musiałeś szukać znaku na tabelach kodów Unicode ? Nigdy nie widziałeś w niej adresu URL %20? Nigdy nie korzystałeś z GUID ? Nigdy nie widziałeś adresu IPv6 ? Nigdy nie pisałeś BLOBliterału w SQL? Nigdy nie przeglądałeś pliku w edytorze szesnastkowym? Istnieje wiele rzeczy związanych z komputerem, które są tradycyjnie notowane w systemie szesnastkowym.

Jeśli chodzi o liczbę ósemkową, obecnie jest to rzadkie, ale nadal używane w przypadku uprawnień systemu plików Unix.

Zobacz także: praktyczne zastosowania operacji bitowych

Nawet jeśli jesteś w stanie uniknąć programowania „blisko drutu”, ważne jest, aby zdawać sobie sprawę z faktu, że komputery działają w trybie binarnym, z jednego prostego powodu: Wyciekają abstrakcje .

intAbstrakcji w większości języków przecieki jego stałej szerokości naturę. Przepełniają się liczby całkowite i robią to przy „okrągłych” liczbach binarnych, takich jak 2 31 . Myśliciel dziesiętny nie byłby w stanie wyjaśnić błędu z roku 2038 .

float/ doubleAbstrakcja przecieka jej przelicznika 2. Jeśli piszesz 0.1, ty naprawdę 0.1000000000000000055511151231257827021181583404541015625. Dostaniesz błędy, jeśli spodziewasz się dokładnej wartości 0,1.

rev dan04
źródło
2

Rozpoznawanie konkretnych liczb, których wzorce są proste w innych bazach, jest często ogromną wskazówką podczas rozwiązywania błędów. Jeśli twoja odpowiedź jest błędna przez 347, to może nic nie znaczy, ale jeśli jest wyłączona przez 256 lub 128, być może to coś znaczy. Jeśli wstawisz -1 do 16-bitowego typu danych bez znaku, otrzymasz 65535, czyli o 1 mniej niż 65536. Jeśli wiesz, że 2 ^ 16, natychmiast zauważysz swój problem.

Jeśli chodzi o ósemkę, spójrz na te pytania i sprawdź, czy rozpoznanie ósemki, gdy przypadkowo o nią poprosisz, uczyniłoby którąś z tych osób lepszymi programistami.

Kate Gregory
źródło
1

Istnieje kilka wysoce wydajnych technik matematycznych i kompresji danych, których można użyć, gdy rozumiesz te systemy i sposób ich działania. Prawdopodobnie nie wykorzystasz ich zbyt często w pierwszych kilku zadaniach. Ale trzymanie ich w tylnej kieszeni, kiedy stajesz się seniorem i jesteś poproszony o sprawienie, aby przepracowany starszy system działał na słabo przepracowanym serwerze dinozaurów, jest przyjemny.
Staje się to ważniejsze, gdy masz do czynienia ze sterownikami i elektroniką, które nie mają interfejsu API. Zwłaszcza jeśli piszesz ten interfejs API.

SoylentGray
źródło
1

Wprowadzenie do kursów programistycznych, które są częścią studiów informatycznych, ma sens dobrze znać ten materiał. Powracasz do tematu podczas programowania w języku asemblera, projektowania sprzętu, szkolenia na temat języków formalnych itp. Wszyscy inżynierowie elektrycy na mojej uczelni wymagają kursu wstępu do programowania i prawdopodobnie nadal będą korzystać z tych informacji. Poza tym niezbyt ważne.

Peter Smith
źródło
1

Liczby ósemkowe są czasami przydatne w przypadku zestawów znaków. Te ostatnie są oparte na bajtach, a jeden ósemkowy = 8 bitów = jeden bajt. Na przykład w UTF-8 znaki inne niż ASCII mogą mieć dwa lub więcej bajtów; liczby ósemkowe są wygodniejsze do ich reprezentowania niż liczby szesnastkowe.

Bity są przydatne, ponieważ ... hej! Wiesz, że twój komputer ciągle radzi sobie z zerami i zerami, prawda? Mam na myśli poważnie ... Nie chodzi tylko o to, że potrafimy żartować, że informatycy są jedynymi, którzy wiedzą, że 1 + 1 = 10. Jest to również przydatne dla operatorów związanych z bitami lub jako varbits. Te ostatnie pozwalają zmniejszyć wymagania dotyczące przechowywania w bazach danych w przypadku serii flag.

Co do heksadecymalnego, zakładam, że nigdy nie otworzyłeś edytora heksadecymalnego, aby zwiększyć statystyki i wyposażenie postaci RPG. Gdybyś to zrobił zamiast pobierać edytor znaków, dobrze wiedziałbyś, dlaczego warto mieć sens liczb szesnastkowych. ;-)

Denis de Bernardy
źródło
Myślę, że masz na myśli „oktet”, a nie „ósemkowy”. Jedna cyfra ósemkowa to trzy bity. Użycie stałych ósemkowych dla znaków spoza ASCII jest zapamiętywaniem z początków C, które zostało opracowane na PDP-11, który wykorzystywał reprezentację ósemkową w większości dokumentacji (patrz ta karta referencyjna PDP-11 ).
TMN
Ja mogę być. Angielski nie jest moim językiem ojczystym. :-)
Denis de Bernardy
1

Ukończyłem uniwersytet 3 lata temu i myślę, że bardzo ważne jest, aby móc czytać i pisać liczby szesnastkowe. Pracuję z dużą ilością dużych plików XML do pracy (duże to 100 MB +). Czasami dostajesz plik XML, który skarży się na nieprawidłowy znak XML, którego nie można wyświetlić w żadnym edytorze tekstu, więc musiałem użyć edytora szesnastkowego i napisać kod, aby wskazać nieprawidłowe znaki. To zadanie byłoby bardzo trudne bez znajomości liczby heksadecymalnej.

Alvin
źródło
1

Wiele lat temu nauczyłem się wartości hex podczas pracy na systemach 8-bitowych.

Jasność zrozumienia, że ​​coś znajdowało się w B000 lub E7FF, była niesamowita.

Wczoraj musiałem dokładnie wiedzieć, jakie znaki są na końcu wiersza tekstu. Znajomość różnicy między 0x0A a 0x0A 0x0D może być naprawdę ważna.

Scott Bruns
źródło
1

Czy ktoś ma dobry przykład, gdzie przeciętny programista użyłby liczby ósemkowej?

Obecnie ósemka jest dość rzadka, ale używam heksów bardzo często i często myślę o problemach binarnych.

Programuję przede wszystkim w C i C ++, z pewnym Objective C, i dużo pracy z grafiką rastrową i wektorową w Linux i Mac OS X. Na tych arenach najważniejsze jest pisanie kodu, który działa skutecznie i dobrze wykorzystuje pamięć. Musisz także zrozumieć sposób, w jaki maszyny wewnętrznie reprezentują to, z czym pracujesz. Najwygodniejszym sposobem na to jest szesnastka. Na przykład standardowy 24-bitowy kolorowy piksel jest reprezentowany w trzech bajtach, a wiedza na pierwszy rzut oka, że ​​0x000000 jest czarny, 0x00FF00 jest czerwony, a 0x008000 jest różowy, jest naprawdę bardzo przydatny!

Dużo pracuję również z międzynarodowymi standardami formatów plików. Jednym z nich, z którym ostatnio pracuję, jest MXF, który służy do przechowywania wideo dla transmisji, DVD, itp. Jest to format binarny, i znowu najłatwiej jest go obsłużyć za pomocą heksadecymatu, a czasem binarnego. Kiedy debugujesz, dlaczego niektóre wideo oparte na MXF nie są odtwarzane bezpośrednio w twoim systemie, to naprawdę przydatne jest spojrzenie na jakieś 32-bitowe pole i uświadomienie sobie, że bit do wygaszania ekranu jest przypadkowo ustawiony - i możesz to zrobić że na heksie, ale w bazie 10 jest to prawie niemożliwe.

Jeśli zamierzasz spędzić karierę, pisząc Perla, masując ciągi tekstowe, to nie, prawdopodobnie nie musisz zbyt dobrze znać heksadecymalnego, ósemkowego lub binarnego. Ale w momencie, gdy zaczynasz zajmować się rzeczami, które robię, przynajmniej hex i binarne są niezbędne.

Bob Murphy
źródło
0

Jeśli chcesz zostać programistą, powinieneś znać system szesnastkowy. Byłoby to zbyt niezręczne, abyś musiał przyznać się w pracy w tym rzadkim dniu, w którym musisz wiedzieć, że go nie rozumiesz.

Nie oznacza to, że musisz mieć możliwość dodawania liczb szesnastkowych do swojej głowy. Zaczyna ci to przeszkadzać w zasadach regularnego dodawania, jeśli i tak to zrobisz. :)

John Robertson
źródło
0

To, co binarne, szesnastkowe i ósemkowe mają ze sobą wspólnego, nie polega na tym, że nie są one bazowe10, ale że wszystkie są potęgami dwóch. Ponieważ komputery są z natury binarne, daje to każdemu z nich pewną aplikację, w której są najbardziej odpowiednim lub wydajnym sposobem wyświetlania i zarządzania danymi.

Było to bardzo ważne, kiedy całe programowanie było na niskim poziomie. W programowaniu na wysokim poziomie, że obecnie systemy z liczbą 2 są o wiele mniej ważne. Dokładne zapoznanie się z nimi na każdym kursie programowania może być reliktem dawnych czasów.

Ale te systemy liczbowe wciąż mają swoje zastosowanie, nawet jeśli pracujesz w językach wysokiego poziomu. Kolor, na przykład, jest nadal przechowywany w 24 bitach, 8 bitów na kolor podstawowy. A ponieważ szesnastkowy jest najlepszym sposobem reprezentowania bajtu w sposób czytelny dla człowieka, jest nawet częścią CSS, który powinien być użyteczny dla osób, które nigdy nie miały wstępu do programowania.

Nie możesz zrozumieć komputerów bez zrozumienia binarnego. Wprowadzenie do binarnego jest niezbędną częścią każdego dokładnego wprowadzenia do programowania. W codziennej pracy może nie być konieczne wykonywanie wielu konwersji między systemami liczbowymi, ale wykonywanie takich ćwiczeń to jedyny sposób, aby naprawdę poznać te systemy liczbowe *. Znajomość więcej niż jednego systemu innego niż podstawowy10 jest jedynym sposobem na właściwe zrozumienie, że dane mogą być reprezentowane na wiele sposobów, wszystkie są prawidłowe.

  • Jak powiedział John von Neumann: „[...] nie rozumiemy rzeczy, przyzwyczajamy się do nich”.
Waquo
źródło
0

Myślę, że konwersja jako taka z jednej bazy do drugiej nie jest bardzo ważna dla programowania. W programowaniu na wysokim poziomie nie potrzebujesz konwersji (a być może kiedykolwiek będziesz tego potrzebować, dostępne są funkcje lib i kalkulator). Gdy nurkujesz w programowaniu na niższym poziomie, nie jesteś już na kursie wprowadzającym.

Myślę, że dwa (powiązane) zagadnienia są ważne do omówienia na kursie podstawowym.

  1. O kodowaniu. Nie chodzi o konwersję matematyczną, ale o używanie liczb (dowolnego rodzaju liczb) do przechowywania informacji (dowolnego rodzaju informacji). Możesz to zilustrować kodem Morse'a lub malować cyframi, jeśli chcesz. Ale ponieważ komputery raczej używają plików binarnych, a pliki binarne są zwykle wyświetlane jako szesnastkowe, rzeczy zwykle są ilustrowane przykładami szesnastkowymi. (I chociaż są przy tym, mogą wyjaśnić trochę zakończenia linii, które zostały wspomniane w tym temacie. Radzę tylko rozpoznać różne kształty i formy, które mogą one przyjąć, niektóre z nich to 0x0D, 0x0A , CRLF, „\ n” i „\ r”)

  2. Problemy z przepełnieniem. Po raz kolejny nie ma potrzeby ilustrowania tego za pomocą heksów. Mógłbyś skorzystać z przykładu y2k (który nie miał nic wspólnego z heksadecymatem) Również tutaj radzę rozpoznać różne najbardziej prawdopodobne wskaźniki (255, 32767, 65535, 2M14). Dlaczego są to wskaźniki, są bezpośrednio związane z bajkową naturą pamięci wewnętrznej, ale konwersja nie jest ważną częścią.

Nie zgadzam się z tym, że musisz to znać dla bitflagów (ponieważ w kursie wstępnym programowania nazwane stałe są o wiele bardziej pouczające i przydatne).

Inka
źródło
0

Jeśli przejdziesz do programowania wbudowanego niskiego poziomu, będziesz używał systemu szesnastkowego. Służy do określania wzorów bitów w rejestrach sprzętowych i wartości bajtów w zrzutach pamięci. Dowiesz się również, jak korzystać z każdego operatora bitowego w dowolnym używanym języku programowania.

mkClark
źródło