что делает этот макрос C ++? - PullRequest
1 голос
/ 17 июня 2009

Это для MSVC

#define Get64B(hi, lo) ((((__int64)(hi)) << 32) | (unsigned int)(lo))

В частности, какова роль оператора <<? </p>

Спасибо за вашу помощь

Ответы [ 8 ]

17 голосов
/ 17 июня 2009

<< - оператор левого смещения. Этот макрос предназначен для создания 64-битного значения из двух 32-битных значений с использованием первого аргумента в качестве старших 32 битов и второго аргумента в качестве нижних 32 битов нового значения. </p>

3 голосов
/ 17 июня 2009

Он принимает два 32-разрядных целых числа и возвращает 64-разрядное целое число, первый параметр которого равен 32 старшим битам, а второй - 32 младшим битам.

<< - оператор левого смещения. Он принимает старшие 32 бита, сдвигает их, а затем ИЛИ, что приводит к младшим битам. </p>

2 голосов
/ 17 июня 2009

АакашМ ​​правильный. Может быть легче понять написанное как метод

__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;
}
2 голосов
/ 17 июня 2009

operator << - это двоичный оператор сдвига влево. Он сдвигает переменную int64 hi влево на 32 бита. </p>

0 голосов
/ 17 июня 2009

Возвращает 64-разрядное целое число из двух 8,16,32 или 64-разрядных целых чисел. Это безопаснее как: привет << 32 | л </p>

0 голосов
/ 17 июня 2009

Возвращает 64-битное целое число с использованием двух 32-битных целых, одно используется в качестве байтов младшего разряда, а второе - в качестве младших байтов.

hi << 32 преобразует целое число в старшие байты 64-битного целого. Пример: </p>

Get64B (11111111111111110000000000000000, 000000000000000011111111111111111)

возвращает 11111111111111110000000000000000000000000000000011111111111111111

Потому что 11111111111111110000000000000000 << 32 возвращает </p>

1111111111111111000000000000000000000000000000000000000000000000

0 голосов
/ 17 июня 2009

Это левый оператор сдвига, и его стандартное значение (для числовых типов) - сдвиг битов влево

int a = 1;
int b = a << 3; // b is now 1000 binary, 8 decimal

Код создает 64-разрядное число из двух 32-разрядных чисел.

0 голосов
/ 17 июня 2009

Бит сдвигает значение hi влево на 32 бита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...