Обновить

Глупые фокусы: преобразование 32-битного значения в 64-битное, когда неважен мусор в старших битах

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров3.1K
Всего голосов 9: ↑8 и ↓1+11
Комментарии5

Комментарии 5

Ха, люблю такое, спасибо.

На x86_64 запись 32-битного регистра приводит к обнулению старших битов соответствующего регистра: http://x86asm.net/articles/x86-64-tour-of-intel-manuals/

Поэтому неверно, что в старших битах остаётся мусор. А поскольку в конвенциях вызова регистр для аргумента и регистр для результат разные, то мы в любом случае получаем обнуление старших битов.

Весело, но интересно добиться того же без asm.

Легко :) Надо просто дать понять компилятору что ты имеешь ввиду и он всё поймет)

Скрытый текст
int64_t convert(int32_t num) {
    int64_t r;
    memcpy(&r, &num, 4);
    return r;
}
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
wunderfund.io
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
xopxe