Вопрос

Это для 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 | л

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top