Что делает установка глобальной переменной, равной «0x0», в C? - PullRequest
1 голос
/ 21 октября 2019

В настоящее время я перебираю некоторый код, написанный на C для микроконтроллера, и я просто пытаюсь выяснить, почему некоторые переменные установлены равными 0x0 и 0x1. Может кто-нибудь объяснить, что это делает?

Вот код:

// Global variables
static bool volatile radio_busy;
int xx = 0x0;
int yy = 0x0;
int zz = 0x1;
bool flag = 1;

1 Ответ

5 голосов
/ 21 октября 2019

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.
...