что делает этот макрос C++?
Вопрос
Это для MSVC
#define Get64B(hi, lo) ((((__int64)(hi)) << 32) | (unsigned int)(lo))
В частности, какова роль оператора <<'?
Спасибо за вашу помощь
Решение
<< — оператор сдвига влево.Этот макрос предназначен для создания 64-битного значения из двух 32-битных значений, используя первый аргумент в качестве старших 32 битов, а второй аргумент — в качестве нижних 32 битов нового значения.
Другие советы
Он принимает два 32-битных целых числа и возвращает 64-битное целое число, где первый параметр представляет собой 32 старших бита, а второй — 32 младших бита.
<< — оператор сдвига влево.Он берет старшие 32 бита, сдвигает их, а затем выполняет ИЛИ к полученному результату с младшими битами.
operator < < является двоичным оператором сдвига влево. Он сдвигает переменную int64 hi влево на 32 бита.
AakashM правильно. Может быть легче понять написанное как метод
__int64 Get64B(__int32 hi, __int32 lo) {
__int64 combined = hi;
combined = combined << 32; // Shift the value 32 bits left. Combined
// now holds all of hi on the left 32 bits
combined = combined | lo; // Low 32 bits now equal to lo
return combined;
}
Бит сдвигает значение hi влево на 32 бита.
Это левый оператор сдвига, и его стандартное значение (для числовых типов) - сдвиг битов влево
int a = 1;
int b = a << 3; // b is now 1000 binary, 8 decimal
Код создает 64-разрядное число из двух 32-разрядных чисел. Р>
Это возвращает 64-битное целое число, используя два 32-битных целых числа, один используется как байты верхнего порядка, а второй — как байты младшего порядка.
hi << 32 преобразует целое число в старшие байты 64-битного целого числа.Пример:
Get64B (11111111111111110000000000000000, 0000000000000000111111111111111111)
возвращает 111111111111111100000000000000000000000000000000111111111111111111
Потому что 11111111111111110000000000000000 << 32 возвращает
1111111111111111000000000000000000000000000000000000000000000000
Возвращает 64-разрядное целое число из двух 8,16,32 или 64-разрядных целых чисел. Это безопаснее: hi & Lt; & Lt; 32 | л р>