Как установить меньшее или большее значение int64? - PullRequest
1 голос
/ 21 апреля 2011

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

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

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

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

iGUID << 32 = inewlGUID;

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

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

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

iGUID = (iGUID & 0xFFFFFFFF) | (inewlGUID << 32);
0 голосов
/ 21 апреля 2011
iGUID = (static_cast<int64>(inewlGUID) << 32) | (iGUID & 0xffffffff);

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

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

...