0x
- это просто префикс для шестнадцатеричных чисел (основание 16), а не десятичное число по умолчанию (основание 10).
Таким образом, массив {0x0, 0x1, 0xf, 0x42}
состоит из десятичных значений0
, 1
, 15
(потому что цифры 0-9
и a-f
равны 10-15
) и 66
(от 4 * 16 + 2
).
Люди часто будутиспользуйте шестнадцатеричное число, когда намерение состоит в том, чтобы работать с битовыми комбинациями , а не со значениями (поскольку одна шестнадцатеричная цифра полностью содержится в четырех битах) (a) .
Намерениенепонятно из приведенного вами фрагмента - у него раздражающие общие имена переменных, которые, кажется, дают нет значимого указания относительно того, для чего они используются, что является отличительной чертой неподготовленных программистов, которые, кажется, думаютбольшие имена переменных как-то занимают больше места: -)
(a) Например, вы можете сделать следующее, чтобы установить бит b5
(где биты нумеруютсяот наиболее значимого b7
до наименее значимого b0
) из отображенного в памяти местоположения 1
:
unsigned char *memLoc = 0xff00; // memory to modify.
unsigned char curr = *memLoc; // get current.
curr = curr | 0x20; // set ONLY b5, or with binary 00100000
*memLoc = curr // write it back.