Заголовочный файл inttypes.h и его типы данных

#include <stdio.h>
#include <inttypes.h>

int main()
{
    int32_t i_32 = 2147483647;
    int_least32_t i_least32 = 2147483647;
    int_fast32_t i_fast_32 = 2147483647;

    printf("%" PRId32 "\n", i_32);
    printf("%" PRId32 "\n", i_least32);
    printf("%" PRId32 "\n", i_fast_32);

    return 0;
}

Можете пожалуйста объяснить в чем разница между данными типами ?


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

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

int_least32_t это такой тип, который может вместить 32 битное целое с знакомым, но при этом может быть больше 32 бит. К примеру, может использоваться 64-битный int. Или 36 битный (вроде есть такие процессоры).

i_fast_32 аналогично. Вот только компилятор может использовать такой тип, что бы вычисления с ним были максимально быстрые.

Зачем такие типы нужны? Для более явного выражения своих целей. Вполне может быть процессор, который над 80-битными числами считает супер быстро, а остальные типы - за счёт каста (и потери производительности). Используя первый тип мы явно говорим компилятору - нужно что то минимум 32-битное.

В этом всем мне очень нравится то, что обычный int не имеет фиксированного размер ни в байтах, ни в битах. а также стандарт никак не называет количества бит в байте. Как то так...

→ Ссылка