Этот сайт использует 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