Ваш вопрос неоднозначен. Это зависит от того, что вы подразумеваете под «раскол». Вы можете разделить представление значения вашего исходного long long
или разделить представление объекта вашего long long
.
Если вы хотите разделить представление значения, то ваш вопрос еще более неоднозначен из-за того, что ваше первоначальное значение подписано . Как вы собираетесь разделить подписанное значение? Какой результат вы ожидаете? Подпись? Unsigned? Часть старшего разряда подписана, часть младшего разряда не подписана? Или что-то еще?
Для значения без знака это будет выглядеть следующим образом (при условии, что тип получателя long
имеет правильный размер для ваших целей)
unsigned long long long_type = ...;
unsigned long hi = long_type / ULONG_MAX;
unsigned long lo = long_type;
Если вы хотите разделить представление объекта, правильный способ сделать это будет использовать memcpy
(в этом случае подпись исходного значения не имеет значения)
long long long_type = ...;
unsigned long hi, lo;
memcpy(&lo, &long_type, sizeof lo);
memcpy(&hi, (char *) &long_type + sizeof lo, sizeof hi);
В этом случае, конечно, какая часть на самом деле младшая, а какая - старшая, будет зависеть от платформы.