Зачем учить шестнадцатеричное? [закрыто]

28

В свое время я брал довольно много вводных уроков программирования, в основном просто для того, чтобы погрузиться в каждый вид программирования, который я нахожу. Неудивительно, что почти каждый класс работает в одном и том же формате: введение в аппаратное обеспечение, введение в программное обеспечение, а затем вы приступаете к реальному программированию. Хотя понимание того, как работает аппаратное и программное обеспечение, очень важно, меня всегда смущала одна тема, которая была в каждом отдельном курсе.

В разделе «Введение в программное обеспечение» я обнаружил, что они всегда уделяют большое внимание грамотности в двоичных, шестнадцатеричных, а иногда даже в восьмеричных системах счисления. Я понимаю, что хорошо понимать, что это за вещи и как их интерпретирует компьютер, но мне никогда не приходилось узнавать, как читать и писать какие-либо из этих систем счисления. Действительно, единственный раз, когда я увидел что-то кроме base 10, это цвета в CSS, что еще проще, если вы используете что-то вроде www.colorpicker.com

Я просто не знал о чудесном использовании этих систем счисления, не являющихся основанием 10, в мире программирования, или это просто старая традиция включать эти разделы во все учебники по программированию? У кого-нибудь есть хороший пример того, как средний программист будет использовать восьмеричное число?

jwegner
источник
1
У кого-нибудь есть хороший пример того, как средний программист будет использовать восьмеричное число? Да, если вы когда-нибудь будете писать программное обеспечение, связанное с авиационной отраслью, вы, скорее всего, столкнетесь с кодами транспондеров, которые представляют собой 4-значное восьмеричное число. en.wikipedia.org/wiki/Transponder_%28aviation%29
Бен Коттрелл,

Ответы:

14

Все ответы хорошие, но они не касаются того, что я считаю самой ценной частью. Обучение «думать» на разных основах делает вас более свободно владеющим компьютерами.

Если вы хотите хранить строку строчных букв, упакованную достаточно хорошо, как бы вы это сделали?

Ну, есть 26 строчных букв, которые легко переводятся в диапазон 0-31, который является 5-битным числом, вы можете упаковать 6 5-битных чисел в 32-битное поле (int?) И даже иметь достаточно остатка за несколько знаков препинания.

Я не говорю, что hex помогает в таких вещах, но понимает, как конвертирует числа.

Другой случай, время от времени вы используете base-64 для передачи несколько длинных чисел в ascii. Вы бы знали, как это реализовать? Зачем реализовывать это так? Вы даже понимали, что это то, что вы печатали каждый раз, когда вводили «CD KEY» в поле регистрации игры?

Кроме того, для развлечения поиграйте с базой 12 некоторое время. Математика оказывается действительно интересной в базе 12 (база 10 глупа в сравнении, я бы хотела, чтобы мы развивались с 6 пальцами - мы могли бы быть впереди десятилетий в нашем понимании математики). Некоторые очень умные ранние люди использовали базу 12 для разработки часов.

В базе 10 у нас есть 3 «крутых» числа, которые создают легкие шаблоны, 2, 5 и 9 с 8, 6 и 4 в качестве «второстепенных» крутых чисел. В базе 12 у вас есть 2,3,4,6,11 как «крутые» числа с 8,9 и 10 как «второстепенные» крутые числа, что означает, что если бы мы использовали базу 12, мы были бы намного лучше в распознавании паттернов в числах потому что мы будем видеть их все время.

Также бинарный. Вы можете рассчитывать на одну руку до 32 - я делаю это совсем немного, иногда пригодится, если считать до 5 просто не режет :)

Двоичные файлы - это весело, но они плохо переводятся. Когда вы хорошо разбираетесь в гексе, вы начинаете видеть «A» как 1010 и «5» как 0101, и эти вещи начинают действительно иметь значение. Если у вас есть битовое поле, которое вы хотите извлечь из 6-го бита: 00100000, что вы "и" с ним? Вы должны просто знать, что это 0x20.

Если вы видите код с кодом 0x0600, который извлекается? Вы должны знать, даже не задумываясь об этом - вы должны прочитать это так, как если бы оно было написано 0000011000000000 (но легче читать, потому что вам не нужно считать нули).

Почему вы хотите ограничить свой мозг и его способность обрабатывать данные?

Bill K
источник
На самом деле, часы были разработаны в base60 .
Дени де Бернарди
@ Денис У меня сложилось впечатление, что нынешняя теория заключалась в том, что они были разработаны людьми, которые насчитали двенадцатую базу, которые проиграли тупым людям, которые не могли думать, передавая пальцы. 60 - это всего лишь 12 дивизий, далее разделенных на группы по 5, и похоже, что после взлома базовыми 10 хрюканьями :)
Билл К
Возможно. Если честно, я ни в коем случае не специалист. Ваш комментарий просто вернул некоторые давно забытые воспоминания. Я также вспоминаю, что углы, измеряемые в 360 градусах, исходят от основания 60 (и того же вавилонского изобретателя), но, как вы указываете, это может быть связано с тем, что база 10 хрюкает просто перегружая то, что изначально было математиками основания 12. :-) А теперь представьте, если бы мы считали в базе 20, как это делали некоторые американские индейцы. :-D
Дени де Бернарди
44

Чему учиться? Чтобы быть компетентным программистом, вам нужно понимать различные числовые базы, но в области шестнадцатеричных данных мало что можно узнать, кроме того, что ABCDEF следует после 9.

Нил Баттерворт
источник
8
ОП может иметь в виду возможность умственного переноса на базу 10 из других баз. Это может быть полезным навыком в какой-то момент, и все же может быть для определенной категории программистов низкого уровня, но сегодня в значительной степени не имеет значения. Например, вы можете сделать преобразование в vim тривиально.
Рейн Хенрикс
Правильно. Я должен был быть более ясным.
Jwegner
2
@ Rein Я никогда не был очень хорош в этом (я должен делать математику в моей голове), поэтому я не могу сказать. Однако я имел обыкновение мысленно переводить из шестнадцатеричного языка на язык ассемблера Z80, что было полезно в то время. Я подозреваю, что возможность транспонировать из hex в ассемблер 80x86 (или что-то еще) все еще полезна для программистов, работающих сегодня.
Нил Баттерворт
1
@Neil Butterworth: 8080 кодов операций имеют больше смысла, если смотреть в восьмеричном виде, если память не изменяет. Моя память очень туманна о том, как это применимо к расширениям Z80.
Дэвид Торнли
1
@Neil: Я думаю, что значительная часть была командами перемещения регистра в регистр, которые выглядят как 01xxxyyy в битовом формате, где xxx - пункт назначения и источник yyy. Я не знаю, есть ли другое восьмеричное значение.
Дэвид Торнли
18

У кого-нибудь есть хороший пример того, как средний программист будет использовать восьмеричное число?

Восьмеричной? Обычно нет, за исключением разрешений * nix.

Шестнадцатеричный? Вы ставите. Вы игнорируете довольно большое количество из нас, кто перетасовывает биты вокруг встроенных систем, рассматривая протоколы или форматы файлов на битовом уровне, и так далее. Но, конечно, если вы находитесь вдали от работы с приложениями или в Интернете, вам может быть легче сойти с рук.

Пример: регистры конфигурации на микроконтроллерах и тому подобное.

Возьмите номер 54312, взятый случайным нажатием клавиши. Можете ли вы сказать, какие биты установлены? Я не могу, по крайней мере, не с моей головы. Шестнадцатеричный эквивалент, то есть 0xd428. Чтос другой стороны, сразу говорит мне, что битовый паттерн, на который я смотрю, - это 1101 0100 0010 1000. Он более логически структурирован для такого рода вещей, и вы обнаружите, что он вам нужен все время, когда вы близки к металл. Скажем, приведенное выше число - это то, что я получаю при сбросе с mcu, и что мне нужно установить биты 7 и 9 по некоторым причинам. В гексе я легко вижу, что полученное число должно быть 0xd6a8, но в десятичном виде? Это 54952, это не так интуитивно, если вы спросите меня. Конечно, это вопрос добавления 640 к значению, но это сложнее понять. Конечно, на практике можно просто сдвинуть биты в правильную позицию и ИЛИ с исходным значением, но вы все равно можете захотеть узнать, каково окончательное представление.

n42
источник
1
Какой вид вызывает вопрос «почему меня должно волновать, какие биты установлены?» Для некоторых (многих? Большинства?) Приложений это не актуально.
Нил Баттерворт
10
Договорились - при условии, что мы говорим о высоком уровне развития. Низкий уровень, независимо от того, установлен ли или очищен определенный бит, может не просто повлиять, но иногда будет определять, загружается ли вообще кровавый микроузел, или получает ли нужное периферийное устройство необходимую мощность, или он работает на тактовой частоте x, а не y , Это только начало, и если вы имеете дело с такого рода разработкой, то, по сути, важны отдельные биты. Иногда много. Но опять же, это зависит от вашего домена, я просто говорю; Не забывайте о встроенном мире. =)
n42
1
+1 - чем ближе к машине вы получаете, тем больше вам нужно использовать разные базы. Это не просто встроено; большинство языков имеют битовые флаги, и они часто пишутся в шестнадцатеричном формате по понятным причинам. И наоборот, довольно бессмысленно преподавать на первом курсе программирования, но тогда большинство первых курсов программирования совершенно бессмысленны. Почти все программисты учат себя правильно?
1
@Davor: Это потому, что гекс легче читать. Я могу понять 8-значное шестнадцатеричное значение намного быстрее, чем 32-значное двоичное значение.
Стив С
2
@ Steve S: Честно говоря, я подозреваю, что это потому, что мы тоже ленивые. 0x80 короче, чем 0b10000000. Но я согласен. Я также согласен с тем, что в первом курсе по программированию это в значительной степени бессмысленно, но вы можете столкнуть его с дискретной математикой, программированием в реальном времени, организацией компьютеров и т.
n42
12

У кого-нибудь есть хороший пример того, как средний программист будет использовать восьмеричное число?

Если вы устанавливаете разрешения для файла в Unix (или Linux), вы используете 3-значное восьмеричное число. Первая цифра - это права пользователя, вторая - это права группы, а последняя цифра - это права, которые получают все остальные.

Я должен был понять этот факт в коде, который я написал на прошлой неделе.

Если вы посмотрите на вывод стандартных алгоритмов хеширования, таких как MD5, вы часто найдете их записанными в шестнадцатеричном виде. Я видел несколько случаев, когда это приводило к арифметике на необычных основах.

Если вы хотите понять, как с плавающей запятой представляются внутри, и, следовательно, почему 1/10 не представляется точно, вам абсолютно необходимо понять, как выполнять арифметику в разных основах. Это эзотерическое знание до того дня, когда оно укусит вас в тыл, и вдруг вам действительно нужно будет понять это в спешке.

И есть тонны других случаев , где вы сможете найти фундаментальную бинарную природу внутри данных компьютеров появляющейся. Конечно, если вы просто пишете веб-сайт CRUD, вы, вероятно, никогда не столкнетесь ни с одним из них, потому что это происходит на уровнях, с которыми уже сталкивался кто-то другой.

btilly
источник
4
* разрешения nix не являются восьмеричными. Вы не выполняете математические вычисления с этими представлениями. В лучшем случае это восьмеричные представления двоичной маски.
Джоэл Этертон
@Joel Etherton: Когда вы получаете разрешения от статистики файлов, они появляются в виде чисел, которые по умолчанию будут отображаться в базе 10. Если вы не понимаете преобразование в / из восьмеричного числа, эти числа трудно понять. Я писал документацию, которая должна была объяснить этот факт. Было много математических расчетов.
Btilly
@btilly: Вы неправильно поняли, что я говорю. Если вы установите права доступа к файлу 755, вам не нужно будет добавлять это ни к чему. Это просто маска, которая описывает комбинации разрешений. Конечно, вы должны признать, что это означает (4 + 2 + 1) (4 + 0 + 1) (4 + 0 + 1), но это все еще только представления двоичной маски. На что вы ссылаетесь, когда говорите «статистика файла»? Я никогда не видел статистику файла для разрешений, предоставленных в базе 10 (строго придерживаясь этого примера).
Джоэл Этертон
1
@Joel Etherton: попробуйте, perl -le '@stat = stat(shift); print $stat[2]' some_fileи вы получите статистику в виде числа в базе 10. Вы должны передать его в Perl chmodтаким же образом. Поэтому имеет смысл хранить число таким образом в базе данных, после чего мне нужно задокументировать, что эти числа должны делать с более знакомыми разрешениями Unix. Как я уже сказал, это был не гипотетический пример.
Btilly
@Joel Etherton: скажем, у вас есть файл с правами доступа 419 (десятичный), вы хотите сделать этот файл исполняемым пользователем, но не читаемым для всех. Как вам нужно изменить номер? Значение, возвращаемое в вызове C stat (), является int, то, как вы решите печатать, это другое дело.
Ватин
9

Надеюсь, в реальном мире вас не будут опрашивать при преобразовании шестнадцатеричного числа в двоичное в десятичное. В вашем распоряжении будут инструменты для конвертации любым удобным вам способом.

Я согласен, у вас должно быть понимание того, что происходит, но зачем запоминать, когда вы можете посмотреть это?

Тем не менее, я нашел полезным запомнить ключевые номера (для меня 0x64 = 100, 0xFF = 255, 0xFFFF = 65535 и т. Д.), Потому что они часто встречаются.

Могу ли я узнать, что такое 8675309 в двоичном, шестнадцатеричном и восьмеричном виде? Нет, но я могу открыть инструмент, который может, когда мне нужно.

Дилан Яга
источник
3
Вы забыли 57005, обычно используемый как constelvis = 57005;
Беван
5

Единственное, для чего я когда-либо использовал восьмеричное - это права доступа к файлам в Unix-системах.

Шестнадцатеричный и двоичный файлы очень полезны, если вы выполняете какую-либо работу с близкими к проводным протоколам или близкими к металлической передаче данных. Фундаментально данные передаются в двоичном формате, который тривиально представляется в виде гексагона.

Вы также обнаружите, что в таблицах данных часто указываются шестнадцатеричные значения, поэтому лучше показать это значение в коде, как оно указано в таблице.

Если вы используете какой-либо из них много, вы в конечном итоге достаточно умело преобразуете в десятичную систему и обратно, по крайней мере, для общих значений.

Все, что сказал; Я подозреваю, что тяжелый акцент в основном исторический. Как вы говорите, есть много программистов, которым не нужно ничего, кроме десятичной.

Люк Грэм
источник
5

Вы на самом деле спрашиваете, зачем изучать мощность 2 числовых представлений?

Компьютеры состоят из цепей , электрический ток течет по цепям на двух разных уровнях: высоком и низком, чтобы представлять два уровня токов, мы используем двоичные цифры, потому что они могут содержать два состояния: одно (высокое) или нулевое (низкое).

Двоичные цифры образуют узоры . Например, если единственный способ, которым вы и я можем говорить, - это через канал, мы можем установить, что если вы захотите отправить мне письмо А, вы отправите мне двоичный шаблон: 1000001. Поскольку я ленив , Я не хочу запоминать 7 семи цифр. Скорее, я буду использовать систему счисления степени 2 для представления больших двоичных цифр в меньшую. Я могу использовать 8 (2 ^ 3) или 16 (2 ^ 4).

Как вы можете видеть, большинство компьютерного оборудования и программного обеспечения используют двоичное представление, а мы, люди, используем мощность двух представлений, таких как восьмеричное и шестнадцатеричное, чтобы читать двоичное представление более эффективно и безболезненно.

Теперь пример среднего программиста , который должен понять силу 2 представлений:

  1. ASCII
  2. Unicode
  3. Понимание программирования управления памятью (стек, куча, адреса памяти, дампы ядра)
  4. Отладка
  5. Чтение двоичных данных осуществляется в основном в шестнадцатеричном редакторе.

Теперь мои последние два цента, я очень уверен, что вы можете довольно быстро выучить любую степень 2 представлений (так как вы уже управляли курсами начального программирования). Вы можете забыть преобразование, но это не должно быть чужой концепцией, если вы хотите быть средним программистом.

Армандо
источник
3

Я никогда не использовал восьмеричное, но нет ничего необычного в том, чтобы видеть hex в отладчике, и иногда имеет смысл использовать hex в вашем исходном коде (обычно, потому что лежащие в основе данные являются битовыми флагами).

Лорен Печтель
источник
3

Я не знаю, есть ли необходимость в этих днях, но много лет назад, когда я был системным программистом, умение читать и понимать hex было необходимым. Мне будет представлен дамп хранилища (все в шестнадцатеричном формате), и я расшифрую шестнадцатеричное представление обратно на язык IBM Assembly. После того, как вы это сделаете некоторое время, у вас будет возможность сделать это напрямую - прочитайте гекс и напишите эквивалент сборки. Очень удобно для отладки. Сложение и вычитание шестнадцатеричных значений было полезно для вычисления смещений из базовых регистров.

Я подозреваю, что на практике в этом нет особой необходимости, но знание этого вряд ли может быть плохим.

Саймон Найтс
источник
Там я и приобрел свои навыки в шестнадцатеричном формате. Позже это обострилось, когда я был вынужден отлаживать код без символического отладчика в VAX / VMS (мы отправляли код клиентам без какой-либо информации о символах). В настоящее время я редко использую его, хотя мы кодируем некоторую информацию в определенных URL в шестнадцатеричном формате, и время от времени полезно иметь возможность декодировать их на лету.
TomG
3

Речь идет не о том, чтобы быть «беглым» в чтении двоичного / шестнадцатеричного кода, но достаточно комфортно, чтобы вы могли быстро сделать умственное преобразование, когда встречаете их. Представьте себе программирование, не разбираясь в простой арифметике, и вам приходилось каждый раз приходить к калькулятору, чтобы умножить на два.

Шестнадцатеричный / двоичный код важен, потому что это язык, на котором говорят компьютеры. Вы всегда будете сталкиваться с ним местами, особенно при выполнении отладочных упражнений, и ваши данные находятся в шестнадцатеричном формате.

Я также хотел бы подчеркнуть важность понимания base-2 в контексте того, как различные числовые типы представляются внутри, и как работает арифметика. Благодаря этому вы лучше поймете, когда и как, например, иметь дело с проблемами округления с плавающей запятой и целочисленным переполнением.

В качестве еще одного примера, побитовые операции и битовые флаги по-прежнему преобладают в программировании, и это еще одно место, где важно понимание base-2.

Скотт Вегнер
источник
2

Действительно, единственный раз, когда я видел что-то кроме base 10, это цвета в CSS,

Вам никогда не приходилось искать символ в диаграммах кода Юникода ? Никогда не видел URL, который был %20в нем? Никогда не использовал GUID ? Никогда не видел IPv6-адрес ? Никогда не писал BLOBлитерал в SQL? Никогда не просматривал файл в шестнадцатеричном редакторе? Есть много компьютерных вещей, которые обычно записываются в шестнадцатеричном виде.

Что касается восьмеричного, то в настоящее время это редко, но все еще используется для разрешений файловой системы Unix.

Смотрите также: практическое применение побитовых операций

Даже если вам удастся избежать какого-либо программирования «в непосредственной близости», все равно важно осознавать тот факт, что компьютеры работают в двоичном формате по одной простой причине: утечка абстракций .

intАбстракция в большинстве языков просачивается его равноширинный характер. Целое переполнение, и они делают это на «круглые» двоичные числа , как 2 31 . Мыслитель, состоящий только из десятичных чисел, не сможет объяснить ошибку 2038 года .

float/ doubleАбстракция просачивается его десятичную 2. Если вы пишете 0.1, вы действительно получите 0.1000000000000000055511151231257827021181583404541015625. И вы получите ошибки, если ожидаете точного 0,1.

Dan04
источник
2

Распознавание определенных чисел, шаблоны которых просты в других базах, часто является огромным ключом при решении ошибок. Если ваш ответ неправильный на 347, это может ничего не значить, но если он на 256 или 128, возможно, это что-то значит. Если вы поместите -1 в 16-разрядный тип данных без знака, вы получите 65535, что на 1 меньше 65536. Если вам случится знать 2 ^ 16, вы сразу же обнаружите свою проблему.

Что касается восьмеричного, взгляните на эти вопросы и посмотрите, сделало бы распознавание восьмеричного, когда вы случайно спросите его, кто-нибудь из этих людей лучше программистами.

Кейт Грегори
источник
1

Существует несколько высокоэффективных методов сжатия математических данных и данных, которые вы можете использовать, когда разбираетесь в этих системах и в том, как они работают. Вы, вероятно, не будете использовать их в первые несколько рабочих мест. Но иметь их в своем заднем кармане, когда вы становитесь старшим, и вас просят сделать устаревшую перегруженную систему, работающую на недостаточно загруженном сервере динозавров, приятно иметь.
Это становится более важным, когда вы имеете дело с контроллерами и электроникой, которые не имеют API. Особенно, если вы пишете этот API.

SoylentGray
источник
1

Вступая в курсы по программированию, которые являются частью изучения компьютерных наук, имеет смысл хорошо знать этот материал. Вы возвращаетесь к этой теме при программировании на ассемблере, при проектировании аппаратного обеспечения, прохождении курса по формальным языкам и т. Д. Всем инженерам-электрикам в моем университете необходим курс по введению в программирование, и они, вероятно, будут продолжать использовать эту информацию. Помимо этого, не очень важно.

Питер Смит
источник
1

Восьмеричные числа иногда полезны при работе с кодировками. Последние основаны на байтах, и один восьмеричный = 8 битов = один байт. Например, в UTF-8 не-ASCII-символы могут иметь два или более байтов; восьмеричные числа удобнее представлять их, чем шестнадцатеричные числа.

Биты полезны, потому что ... эй! Вы знаете, что ваш компьютер постоянно работает с нулями и единицами, верно? Я имею в виду серьезно ... Это не просто возможность пошутить, что компьютерные специалисты - единственные, кто знает, что 1 + 1 = 10. Это также полезно для связанных с битами операторов или как varbits. Последние позволяют снизить требования к хранилищу в базах данных при работе с сериями флагов.

Что касается шестнадцатеричного, я полагаю, что вы никогда не открывали шестнадцатеричный редактор, чтобы улучшить характеристики и экипировку персонажа RPG. Если бы вы сделали это вместо того, чтобы загружать редактор персонажей, вы бы хорошо знали, почему удобно иметь возможность понимать шестнадцатеричные числа. ;-)

Дени де Бернарди
источник
Я думаю, что вы имеете в виду «октет», а не «восьмеричный». Одна восьмеричная цифра - три бита. Использование восьмеричных констант для символов, не относящихся к ASCII, является пережитком с первых дней существования C, который был разработан на PDP-11, который использовал восьмеричное представление в большей части документации (см. Эту справочную карту PDP-11 ).
TMN
Я могу быть. Английский не мой родной язык. :-)
Дени де Бернарди
1

Я заканчиваю университет 3 года назад, и я думаю, что очень важно уметь читать и писать шестнадцатеричные числа. Я возиться с большим количеством больших файлов XML для работы (большой смысл 100 МБ +). Иногда вы получите XML-файл с жалобами на недопустимый символ XML, который не отображается ни в одном текстовом редакторе, поэтому мне пришлось использовать Hex-редактор и писать код, чтобы точно определить недопустимые символы. Эта задача была бы очень сложной, не зная шестнадцатеричное число.

Alvin
источник
1

Много лет назад я узнал значение hex, работая на 8-битных системах.

Ясность понимания того, что что-то находится в B000 или E7FF, была поразительной.

Вчера мне нужно было точно знать, какие символы находятся в конце строки текста. Зная разницу между 0x0A и 0x0A 0x0D может быть очень важным.

Скотт Брунс
источник
1

У кого-нибудь есть хороший пример того, как средний программист будет использовать восьмеричное число?

В наши дни Octal довольно редок, но я часто использую hex и часто думаю о проблемах в двоичном формате.

Я программирую в основном на C и C ++, с некоторым Objective C, и много работаю с растровой и векторной графикой в ​​Linux и Mac OS X. В этих областях крайне важно писать код, который работает эффективно и эффективно использует хранилище. Вы также должны понимать, как машины внутренне представляют то, с чем вы работаете. Самый удобный способ взглянуть на это в гексе. Например, стандартный 24-битный цветной пиксель представлен в трех байтах, и зная, что 0x000000 - это черный, 0x00FF00 - красный, а 0x008000 - розовый, это действительно очень полезно!

Я также много работаю с международными стандартами для форматов файлов. Недавно я работал с MXF, который используется для хранения видео для трансляции, DVD-дисков и т. Д. Это двоичный формат, и опять же, с ним легче всего справиться, используя шестнадцатеричный или иногда двоичный формат. Когда вы отлаживаете, почему некоторые видео на основе MXF не воспроизводятся прямо в вашей системе, очень удобно иметь возможность взглянуть на какое-то 32-битное поле и понять, что бит для очистки экрана установлен случайно - и вы можете сделать это. это в гексе, но это практически невозможно в базе 10.

Если вы собираетесь посвятить свою карьеру написанию Perl для массажа текстовых строк, то нет, вам, вероятно, не нужно быть очень знакомым с шестнадцатеричным, восьмеричным или двоичным. Но в тот момент, когда вы начинаете иметь дело с такими вещами, которые я делаю, по крайней мере, шестнадцатеричные и двоичные файлы являются существенными.

Боб Мерфи
источник
0

Вы должны знать шестнадцатеричное, если вы хотите быть программистом. Для вас было бы слишком неловко признавать на работе в тот редкий день, когда вам нужно знать, что вы этого не понимаете.

Это не значит, что вы должны иметь возможность добавлять шестнадцатеричные числа в вашей голове. Он начинает портить вам правила регулярного добавления, если вы все равно это сделаете. :)

Джон Робертсон
источник
0

Общим для двоичного, шестнадцатеричного и восьмеричного кодов является не то, что они не являются базовыми10, а то, что все они являются степенями двух. Поскольку компьютеры по своей природе являются двоичными, это дает каждому из них какое-то приложение, в котором они являются наиболее подходящим или эффективным способом отображения и обработки данных.

Раньше это было очень важно, когда все программирование было на низком уровне. В высокоуровневом программировании сегодня числовые системы степени 2 намного менее важны. Подробное знакомство с ними в каждом курсе программирования может быть пережитком древних времен.

Но эти системы счисления все еще используются, даже когда вы работаете на языках высокого уровня. Например, цвет по-прежнему хранится в 24 битах по 8 бит на основной цвет. А поскольку шестнадцатеричный код является лучшим способом представления байта понятным человеку способом, он даже является частью CSS, который должен использоваться людьми, которые никогда не знакомились с программированием.

Вы не можете понять компьютеры без понимания двоичного кода. Введение в двоичный файл является необходимой частью каждого тщательного введения в программирование. Вам может не потребоваться много преобразований между системами счисления в повседневной работе, но выполнение подобных упражнений - единственный способ по-настоящему ознакомиться с этими системами счисления *. Знание более чем одной неосновной системы с 10 номерами - единственный способ правильно понять, что данные могут быть представлены многими способами, причем все они действительны.

  • Как сказал Джон фон Нейман: «[..] мы ничего не понимаем, мы к ним привыкаем».
Waquo
источник
0

Я думаю, что преобразование как таковое из одной базы в другую не очень важно для программирования. В программировании высокого уровня вам не нужны преобразования (и, возможно, вам когда-нибудь понадобятся функции lib и калькулятор). Когда вы погружаетесь в программирование более низкого уровня, вы больше не проходите вводный курс.

Я думаю, что два (связанных) вопроса важны для изучения базового курса.

  1. О кодировке. Речь идет не о математическом преобразовании, а об использовании чисел (любого типа чисел) для хранения информации (любого типа информации). Вы можете проиллюстрировать это азбукой Морзе или нарисовать цифрами, если хотите. Но поскольку компьютеры скорее используют двоичный код, а двоичный код обычно отображается как шестнадцатеричный код, все обычно иллюстрируется шестнадцатеричными примерами. (И, хотя они и занимаются этим, они могут объяснить немного об окончаниях строк, которые были упомянуты в этом разделе. Я бы посоветовал распознавать различные формы и формы, которые это может принимать, некоторые из них 0x0D, 0x0A , CRLF, '\ n' и '\ r')

  2. Проблемы переполнения. Еще раз, нет необходимости иллюстрировать это с помощью гексагона. Вы можете использовать пример y2k (который не имеет ничего общего с гексами). Здесь также я бы посоветовал распознать различные наиболее вероятные индикаторы (255, 32767, 65535, 2M14). Почему они являются индикаторами, это напрямую связано с байтовой природой внутренней памяти, но преобразование не является важной частью.

Я не согласен с тем, что вам нужно знать это для битовых флагов (потому что во вводном курсе программирования именованные константы гораздо более полезны и полезны).

инка
источник
0

Если вы зайдете в низкоуровневое встроенное программирование, вы будете использовать шестнадцатеричное. Он используется для таких вещей, как указание битовых комбинаций в аппаратных регистрах и байтовых значений в дампах памяти. Вы также научитесь использовать каждый побитовый оператор на любом языке программирования, который вы используете.

mkClark
источник