Что делает макрос LOWORD?

259
30 января 2022, 12:10

Потихоньку погружаюсь в программирование на WinAPI, и некоторые макросы меня немного озадачивают. Среди них макрос LOWORD(I). Не могли бы Вы объяснить, что происходит в строке ниже?)

#define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff))

Answer 1

Делает ровно то, о чём и говорит его название - возвращает 2 младших байта.

Например:

DWORD l = 0x11223344;
WORD w = LOWORD(l);   // w = 0x3344
Answer 2

Вы инициализируете макрос LOWORD, то есть, если в функции main у вас есть LOWORD(L), то у вас будет выводится число, которое считается по этой "формуле": ((WORD)(((DWORD_PTR)(L)) & 0xffff)).

Что делает эта формула?

1) Возвращает первые два младших байта числа L: ((DWORD_PTR)(l)) & 0xffff)

2) Явно приводит это все к типу WORD: ((WORD)(((DWORD_PTR)(L)) & 0xffff))

Вот ссылка на документацию: MSDN

READ ALSO
Размер объекта класса

Размер объекта класса

Почему объект класса B=16, а объект A=4? Как влияет виртуальная функция на размер?

108
Псевдоним шаблона в самом шаблоне класса

Псевдоним шаблона в самом шаблоне класса

Рассмотрим класс итератора для массивов stdext::checked_array_iterator, который определен в заголовочном файле <iterator>Экземпляр класса можно использовать...

90
Конструктор копирования для QList&lt;T&gt;

Конструктор копирования для QList<T>

У меня есть объект который иногда мне нужно будет скопировать в другойесли быть точнее, то у меня в классе client_t есть 3 одинаковых объекта,...

74
Чем плоха публичность переменных в ООП?

Чем плоха публичность переменных в ООП?

Я работаю на C#, но полагаю, это касается любого языка использующий объектно - ориентированную парадигму

161