Настройка 64-битных переменных в C ++ - PullRequest
1 голос
/ 29 марта 2011

Мне интересно, как установить 64-битную переменную в C ++ для моего тестового стенда.Когда я использую variable_name.io_int_write(0,value0) и variable_name.io_int_write(1,value1) (для младших и старших битов), я вижу, что переменные установлены, но в обратном порядке.

Пример: Когда я хочу, чтобы это было 000 ...002, я вижу 200 ... 000

Есть ли альтернативная команда, которая может помочь?Спасибо

Редактировать: у меня есть функция void set_function (set_ * dut)

, и внутри этой функции мне нужно установить 64-битную переменную dut->variable_name

Спасибо за ваши ответы,как бы я решил исправить Endianness в этом случае

1 Ответ

0 голосов
/ 29 марта 2011

Если вы хотите установить 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);
...