Разделить long long на две части (Старшая - long) и (Младшая - unsigned long)

Догадываюсь, что провернуть данную операцию возможно с помощью побитового сдвига, но как - не совсем понимаю. Буду очень признателен, если найду ответ.

Пример того, как это должно работать в моём представлении.

std::pair<long,unsigned long> detach(const long long& _Value) {
    long high = _Value << 32;
    unsigned long low = _Value << 32;

    return std::pair<long,unsigned long>(high,low);
  }

Ответы (1 шт):

Автор решения: Harry

При распространенном варианте - long long - 64 бита, long - 32 -

std::pair<long,unsigned long> detach(const long long& _Value) {

    long high = _Value >> 32;
    unsigned long low = _Value &0xFFFFFFFF;
    return std::pair<long,unsigned long>(high,low);
}

Варианты могут быть и другие, но это вряд ли - потому что, например, при равенстве long и long long по размеру сложно говорить о старшей и младшей части, правда? :)

Но в общем случае можно воспользоваться оператором sizeof(). Только как именно поступать в том или ином случае - это уже другой вопрос...

→ Ссылка