cpp

Целочисленные типы фиксированного размера

Вместо указания конкретного целочисленного типа можно воспользоваться макроопределениями __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

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF