Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Целочисленные типы фиксированного размера
Вместо указания конкретного целочисленного типа можно воспользоваться макроопределениями __int8
, __int16
, __int32
и __int64
. Определения макросов:
#define __int8 char
#define __int16 short
#define __int32 int
#define __int64 long long
Пример объявления переменных:
__int8 x = 10;
__int16 y = 20;
__int32 z = 30;
__int64 k = 40LL;
Кроме того, в заголовочном файле stdint.h
объявлены знаковые типы фиксированной длины int8_t
, int16_t
, int32_t
и int64_t
, а также беззнаковые uint8_t
, uint16_t
, uint32_t
и uint64_t
(полный список доступных типов смотрите в заголовочном файле):
#include <stdint.h>
typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef short int16_t;
typedef unsigned short uint16_t;
typedef int int32_t;
typedef unsigned uint32_t;
typedef long long int64_t;
typedef unsigned long long uint64_t;
Заголовочный файл stdint.h
содержит также макроопределения с допустимыми диапазонами значений для этих типов:
#define INT8_MIN (-128)
#define INT8_MAX 127
#define INT16_MIN (-32768)
#define INT16_MAX 32767
#define INT32_MIN (-2147483647 - 1)
#define INT32_MAX 2147483647
#define INT64_MIN (-9223372036854775807LL - 1)
#define INT64_MAX 9223372036854775807LL
#define UINT8_MAX 255
#define UINT16_MAX 65535
#define UINT32_MAX 0xffffffffU /* 4294967295U */
#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */
Пример:
using namespace std;
// #include <stdint.h> или #include <inttypes.h>
int8_t min = INT8_MIN;
int8_t max = INT8_MAX;
uint8_t umax = UINT8_MAX;
cout << static_cast<int>(min) << endl; // -128
cout << static_cast<int>(max) << endl; // 127
cout << static_cast<unsigned>(umax) << endl; // 255
При использовании типов с фиксированной шириной следует учитывать, что в разных компиляторах объявление типа может быть разным. Гарантируется только диапазон значений для типа, но, например, при объявлении int32_t
вместо типа int
может быть использован тип long
. Спецификаторы у этих типов разные. Чтобы в функции printf()
правильно указать спецификатор следует воспользоваться следующими макроопределениями (полный список макроопределений смотрите в заголовочном файле inttypes.h
):
#include <inttypes.h>
#define PRId8 "d"
#define PRId16 "d"
#define PRId32 "d"
#define PRId64 "lld"
#define PRIu8 "u"
#define PRIu16 "u"
#define PRIu32 "u"
#define PRIu64 "llu"
Пример указания спецификатора при выводе значения типа int64_t
:
// #include <inttypes.h>
int64_t x = 9223372036854775807LL;
printf("%" PRId64, x); // 9223372036854775807
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов