Вопрос для тех, кто часто работает с шестнадцатеричным - PullRequest
13 голосов
/ 11 января 2010

Всякий раз, когда я работаю с шестнадцатеричными значениями, я делаю преобразование (если необходимо) в десятичное в моей голове или с помощью преобразователя.Я подумал: если вы работаете достаточно долго и привыкаете к шестнадцатеричному, вы просто «видите» значение (что бы это ни значило), как при чтении десятичного числа?Я имею в виду, можете ли вы через некоторое время прочитать значения 16-го уровня так же легко, как значения 10-го уровня?Когда я пишу код с шестнадцатеричными значениями, я делаю это, потому что он выглядит сексуально и круто (а иногда потому, что 8 бит помещаются в две цифры, что иногда помогает), а не потому, что я чувствую себя как-то комфортно с ними.Таким образом, я мог знать, есть ли смысл пытаться привыкнуть к шестнадцатеричному, чтобы когда-нибудь с легкостью работать с ними.

Ответы [ 10 ]

8 голосов
/ 12 января 2010

То, как работает мозг, становится лучше, если вы много с ним делаете. Некоторые люди утверждают, что «это как мускул», но это слишком упрощает.

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

Однажды я провел вечер, запоминая первые 100 цифр числа Пи.

И что?

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

То же самое дело здесь. Если вы хотите произвести впечатление на себя и, возможно, на своих друзей, конечно, почему бы и нет. Но это умственное упражнение, а не действительно полезное умение.


В кодировании, если вы не работаете преимущественно с ассемблером, вы будете использовать шестнадцатеричные числа очень редко. Имеет смысл использовать шестнадцатеричные числа в тех контекстах, где эти числа будут сдвоенными. например Вы можете замаскировать байт, используя AND против 0xFF. Числа, связанные с побитовым сдвигом, знаковыми битами, ИЛИ и XOR, также могут иметь большой смысл как шестнадцатеричные. Числа, используемые для повседневной арифметики, обычно лучше всего выражать в десятичном виде.

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

6 голосов
/ 12 января 2010

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

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

Десятичное число больше подходит для работы с «обычными», реальными числами.

2 голосов
/ 12 января 2010

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

1 голос
/ 12 января 2010

Если вы используете шестнадцатеричный код достаточно долго, вы в конечном итоге привыкнете к нему, да. Так же, как вы привыкли к десятичной дроби, когда вы были ребенком. Только не жалуйтесь, когда вы, например, завалили курс математики, потому что «пи не равен 3.243f6a88 ...» или что-то в этом роде.

Кроме того, @oefe, десятичное число не более подходит для работы с «обычными», реальными числами, оно просто более популярно.

1 голос
/ 12 января 2010

Извините. Гик во мне вступил во владение.

Я должен был сделать тебе это.

http://pap.centelia.net/

Это небольшая игра на Javascript, которую я запустил, чтобы помочь тебе стать задирой на шестнадцатеричном.

Да, вы можете обманывать, но не в этом дело!

1 голос
/ 12 января 2010

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

1 голос
/ 12 января 2010

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

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

1 голос
/ 12 января 2010

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

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

1 голос
/ 12 января 2010

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

0 голосов
/ 12 января 2010

Отличный вопрос!

Я думаю, с точки зрения Phinary http://en.wikipedia.org/wiki/Golden_ratio_base

Серьезно, хотя у меня был профессор архитектуры, который не нуждался в дизассемблере - только шестнадцатеричный редактор:)

...