Рассмотрим простой код:
UINT64 result;
UINT32 high, low;
...
result = ((UINT64)high << 32) | (UINT64)low;
Превращают ли современные компиляторы это в настоящий сдвиг ствола на высоком уровне или оптимизируют его до просто скопировать в нужное место?
Если нет, то использование объединения показалось бы более эффективным, чем сдвиг, который, похоже, использует большинство людей. Тем не менее, оптимизация компилятора - идеальное решение.
Мне интересно, как мне посоветовать людям, когда им действительно требуется эта дополнительная немного производительности.