Подтвердить что ты не робот

Зачем использовать hex?

Эй! Я смотрел этот код на http://www.gnu.org/software/m68hc11/examples/primes_8c-source.html

Я заметил, что в некоторых ситуациях они использовали шестнадцатеричные числа, как в строке 134:

for (j = 1; val && j <= 0x80; j <<= 1, q++)

Теперь зачем использовать 0x80? Я не так хорош с шестнадцатеричным, но я нашел онлайн-шестнадцатеричное значение десятичного числа, и он дал мне 128 для 0x80.

Также перед строкой 134 в строке 114 они имеют следующее:

small_n = (n & 0xffff0000) == 0;

Значение hex для десятичного значения дало мне 4294901760 для этого шестнадцатеричного числа. Итак, здесь, в этой строке, они делают бит И и сравнивают результат с 0??

Почему бы просто не использовать номер? Может ли кто-нибудь объяснить и прошу привести примеры других ситуаций.

Также я видел большие строки кода, где он просто шестнадцатеричные числа и никогда не понимал почему: (

4b9b3361

Ответ 1

В обоих случаях, которые вы цитируете, важна битовая диаграмма числа, а не фактическое число.

Например, В первом случае, j будет 1, затем 2, 4, 8, 16, 32, 64 и, наконец, 128 по мере продвижения цикла.

В двоичном, то есть

0000:0001, 0000:0010, 0000:0100, 0000:1000, 0001:0000, 0010:0000, 0100:0000 и 1000:0000.

Нет никакой возможности для двоичных констант в C или С++, но это немного яснее в Hex: 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40 и 0x80.

Во втором примере, целью было удалить нижние два байта значения. Поэтому, учитывая значение 1 234 567 890, мы хотим получить 1,234,567,168.
В шестнадцатеричном формате оно четче: начните с 0x4996:02d2, оканчивайтесь на 0x4996:0000.

Ответ 2

его битовая маска. Значения Hex позволяют легко видеть базовое двоичное представление. n и 0xffff0000 возвращает верхние 16 бит n. 0xffff0000 означает "16 1s и 16 0s в двоичном формате"

0x80 означает "1000000", поэтому вы начинаете с "00000001" и продолжаете переносить этот бит на "0000010", "0000100" и т.д. до "1000000"

Ответ 3

Прямое сопоставление между шестнадцатеричными (или восьмеричными) цифрами и базовыми шаблонами бит, что не имеет десятичного значения. Десятичный "9" представляет что-то другое по отношению к битовым шаблонам в зависимости от того, в каком столбце он находится и какие номера окружают его - он не имеет прямого отношения к битовой схеме. В шестнадцатеричном формате "9" всегда означает "1001", независимо от того, в каком столбце. 9 = '1001', 95 = '* 1001 * 0101' и т.д.

Как остаток моих 8-битных дней, я нахожу hex удобной стенографией для чего-либо двоичного. Бит-скручивание - умение умирать. Однажды (около 10 лет назад) я увидел в университете третий год работы в сети, где только 10% (5 из 50 или около того) людей в классе могли рассчитать битовую маску.

Ответ 4

0xffff0000 легко понять, что он 16 раз "1" и 16 раз "0" в 32-битном значении, а 4294901760 - магия.

Ответ 5

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

int mask = 0b00001111;

Много лет/рабочих дней назад, работая над проектом, в котором участвовало огромное количество математики на уровне бит, я получил питание и создал файл заголовка, который содержал определенные константы для всех возможных двоичных значений до 8 бит:

#define b0        (0x00)
#define b1        (0x01)
#define b00       (0x00)
#define b01       (0x01)
#define b10       (0x02)
#define b11       (0x03)
#define b000      (0x00)
#define b001      (0x01)
...
#define b11111110 (0xFE)
#define b11111111 (0xFF)

Он иногда делает определенный код уровня бит более удобочитаемым.

Ответ 6

Иногда визуальное представление значений в HEX делает код более читабельным или понятным. Например, битмаскирование или использование битов становится неочевидным при рассмотрении десятичных представлений чисел.

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

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

предположим, что у объекта был неэксклюзивный набор свойств, который имел значения либо вкл., либо выключен (3 из них) - один из способов представления состояния этих свойств - с 3 битами.

действительные представления от 0 до 7 десятичными, но это не так очевидно. более очевидным является двоичное представление:

000, 001, 010, 011, 100, 101, 110, 111

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

Я надеюсь, что это поможет.

Ответ 7

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

OxFF = 1111 1111 ( F = 1111 )

но

255 = 1111 1111 

потому что

255 / 2 = 127 (rest 1)
127 / 2 = 63 (rest 1)
63 / 2 = 31 (rest 1)
... etc

Вы видите это? Гораздо проще перейти от Hex к двоичному.

Ответ 8

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

При указании отдельных бит-масок многие люди начинают:

#define bit_0 1
#define bit_1 2
#define bit_2 4
#define bit_3 8
#define bit_4 16
etc...

Через некоторое время они переходят к:

#define bit_0 0x01
#define bit_1 0x02
#define bit_2 0x04
#define bit_3 0x08
#define bit_4 0x10
etc...

Затем они учатся обманывать и позволяют компилятору генерировать значения как часть оптимизации времени компиляции:

#define bit_0 (1<<0)
#define bit_1 (1<<1)
#define bit_2 (1<<2)
#define bit_3 (1<<3)
#define bit_4 (1<<4)
etc...

Ответ 9

Шестнадцатеричные или шестнадцатеричные числа представляют 4 бита данных, от 0 до 15 или от HEX 0 до F. Два шестнадцатеричных значения представляют собой байты.

Ответ 10

Чтобы быть более точным, hex и decimal, все NUMBERS. Основание (основание 10, 16 и т.д.) - это способы представить эти числа способом, который является более четким или более удобным.

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

Hex, (и восьмеричные) обладают тем свойством, что они являются степенями двух, поэтому они красиво группируют группы бит. Hex отображает 4 бита в один гексагон (0-F), поэтому байт хранится в двух полубайтах (00-FF). Octal был популярен на цифровом оборудовании (DEC) и других старых машинах, но одна восьмеричная цифра соответствует трем битам, поэтому он не пересекает границы байтов так же хорошо.

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

Ответ 11

В байте 8 бит. Шестигранник, основание 16, является кратким. Любое возможное значение байта выражается с использованием двух символов из коллекции 0..9, плюс a, b, c, d, e, f.

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

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

Ответ 12

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

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