Если вы хотите установить 64-битную целочисленную переменную в постоянное значение, вы можете просто сказать что-то вроде:
long long var64bit = 1L;
L в конце 1L говорит о том, что это 64-битное постоянное значение 1 .
Если вы знакомы с шестнадцатеричным и хотите использовать 64-битную константу битового поля, тогда обычный способ установки 64-битной переменной будет выглядеть примерно так:
unsigned long long bitfield64bit = 0xDEADBEEFDEADBEEFL;
Опять же, обратите внимание на след L .
Если у вас есть два 32-битных значения, которые вы хотите упаковать в 64-битное значение, то вы можете сделать это, используя операции сдвига и логического ИЛИ, как:
long long var64bit = (long long)(((unsigned long long)high_bits << 32) | (unsigned long long)low_bits);
где * high_bits * - 32-битная переменная, содержащая старшие биты, а * low_bits * - 32-битная переменная, содержащая младшие биты. Я выполняю побитовые операции над значениями без знака из-за возможной чрезмерной паранойи в отношении знакового бита и преобразования между 32-разрядными и 64-разрядными целыми числами.
Противоположные операции, разделяющие 64-битную переменную на старшие и младшие биты, можно выполнить следующим образом:
int high_bits = (int)(var64bit & 0xFFFFFFFFL);
int low_bits = (int)((var64bit >> 32) & 0xFFFFFFFFL);