Как установить более низкое или более высокое значение int64?

Я знаю, что могу получить более высокое значение int 64 с помощью:

int32 higher = (int32)(iGUID >> 32);

Но как я могу это установить?

Я пробовал это с этим, но он говорит, что выражение должно быть изменяемым значением:

iGUID << 32 = inewlGUID;

Мне нужно сохранить другое значение (если я установил более высокое значение, меньшее должно сохраниться).


person Sapd    schedule 21.04.2011    source источник


Ответы (2)


Чтобы изменить старшие 32 бита, оставив нижние неизменными:

iGUID = (iGUID & 0xFFFFFFFF) | (inewlGUID << 32);
person hammar    schedule 21.04.2011
comment
iGUID & 0xFFFFFFFF обнуляет все биты верхнего раздела. правильно? - person Kamran Bigdely; 19.03.2021

iGUID = (static_cast<int64>(inewlGUID) << 32) | (iGUID & 0xffffffff);

Это сохранит все существующее содержимое.

Вы также можете взять адрес 64-битного значения и преобразовать его в указатель на int32, который затем может быть индексирован и назначен. Однако обычно это не рекомендуется, поскольку в этом случае ваш код будет зависеть от порядка байтов платформы.

person Alexander Gessler    schedule 21.04.2011