Можно ли хранить 2 32-битных значения в одной длинной переменной int? - PullRequest
4 голосов
/ 11 августа 2011

Я хочу сохранить два 32-битных значения в одной длинной переменной int.

Как бы вы сделали это на 32-битной ОС с использованием C? Можно ли хранить данные в одной длинной длинной переменной? Если да, то как это сделать?

Ответы [ 3 ]

8 голосов
/ 11 августа 2011

Используйте uint64_t и побитовые операторы.

uint64_t i64;
uint32_t a32, b32;

// Be carefull when shifting the a32.
// It must be converted to a 64 bit value or you will loose the bits
// during the shift. 
i64 = ((uint64_t)a32 << 32) | b32;
0 голосов
/ 11 августа 2011

Если sizeof(long int) == 8, ответ - нет. Если это равенство истинно, используйте ответ Кевина или cnicutar.

0 голосов
/ 11 августа 2011

Если на вашей платформе значение long составляет 64 бита,

int v1 = 123;
int v2 = 456;
long val = v1 << 32 | v2;
...