Введение
Изучая код различных проектов часто можно увидеть такие имена типов, как int8_t, uint32_t, int64_t и другие. Что это такое, как это связано с нормальными и простыми int, long и другими типами, про которые рассказывают при первом знакомстве с C++? Давайте разбираться
База, которую знать надо
Чтобы было понятно о чем речь пойдет дальше, надо сказать как хранятся числа в памяти компьютера. Скажу на самом примитивном уровне, не углубляясь в прямой и дополнительный коды, структуру разных типов данных в зависимости от архитектуры процессора итд, сейчас будет достаточно того факта, что целые числа хранятся в памяти в виде бит 0 и 1, сгруппированных по 8, 16, 32 или 64 бит. Целые числа могут быть знаковыми, когда число может быть положительным или отрицательным, или беззнаковыми, когда число может быть только положительным. Для знаковых типов данных первый битт содержит информацию не о значении числа, а о его знаке. Это максимально упрощенно и в реальности есть нюансы, которые лучше изучить отдельно. бОльшее количество бит позволяет записать бОльшее значение
Что это за зверь такой uint8_t
Такие типы данных называются как Fixed width integer types или же по-русски целые числа фиксированной длины . Фиксированная длина указана в названии каждого типа данных. Давайте расшифруем название на примере типа uint8_t это то же самое, что и unsigned
short . Буква u символизирует о том, что число беззнаковое, то есть его минимальное значение 0. int показывает нам, что этот тип хранит целые числа. Число 8 говорит о том, что для хранения информации используется 8 бит, которые равны одному байту. Такой тип может хранить числа в диапазоне от 0 до 255. окончание _t служит как маркер того, что это тип данных. В принципе теперь можно без проблем понять, что значат остальные типы. А для вашего удобства я приведу табличку, где каждому типу данных сопоставлен диапазон значений.
Почему использовать long long int не лучшая идея
Размер памяти, выделяемый для хранения типа int(или long) может различаться в зависимости от компилятора(который в свою очередь тоже много от чего зависит). Поэтому если на одном компьютере int это 4 байта(то есть 32 бита ), то на другом int может занимать только 2 байта. И как не сложно догадаться, понять этот нюанс можно будет только при тщательной отладке программы. Поэтому применение типов с фиксированной длиной делает код более безопасным и понятным, а также универсальным.
Заключение
На практике целочисленные типы с фиксированной длинной встречаются достаточно часто, поэтому как минимум знать о их существовании полезно. Также, дополнительно к этим типам определены константы, содержащие максимальные и минимальные значения, которые могут хранить определённые типы данных. Подробнее об этой теме можно почитать по ссылке, или просто загуглить cpp Fixed width integer type.