Я пытаюсь скопировать два 32-битных значения в один 64-битный адрес. Одно DWORD — это старшие 32 бита, а второе — младшие 32 бита. Я пробовал следующее, но операнд сдвига в 64-битных значениях не работает:
UINT64 a = 0x12341234;
UINT64 b = 0x00003800;
Мне нужно значение: 0x0000380012341234
Так я и сделал:
printf("b 0x%016x\n", b);
b = ((UINT64)b) << 20;
printf("b 0x%016x\n", b);
и отпечатки, которые я получаю:
b 0x0000000000003800
b 0x0000000080000000
Я пробовал переключаться на разные числа (снова 10 и 10, или 32, или 0x20), но у меня ничего не получалось.
Почему не работает переход на старшие 32 бита UINT64, и как еще я могу это сделать?
%016x
на%016llx
- person r3mainer   schedule 25.05.2017