Модификаторы типов | Программирование на C и C++

Главная » Язык С » Переменные, константы, операторы и выражения » Типы данных

За исключением типа void, основные типы данных могут иметь различные модификаторы. Модификаторы используются для более точного управления ситуацией. Ниже приведен список модификаторов:
signed
unsigned
short

Модификаторы signed, unsigned, long и short могут применяться к целочисленным типам. К символам можно применять signed и unsigned, long может применяться к типу double. Таблица показывает все допустимые комбинации стандарта ANSI С для 16-битных типов данных вместе с размером типа в битах и границами применения в Borland С++.

Все допустимые комбинации базовых типов и модификаторов для 16-битных слов
Тип Длина в битах Диапазон
char 8 от-128 до 127
unsigned char 8 от 0 до 255
signed char 8 от-128 до 127
int 16 от-32768 до 32767
unsigned int 16 от 0 до 65535
signed int 16 от -32768 до 32767
short int 16 от -32768 до 32767
unsigned short int 16 от 0 до 65535
signed short int 16 от -32768 до 32767
long int 32 от -2147483648 до 2147483647
unsigned long int 32 от 0 до 4294967295
signed long int. 32 от -2147483648 до 2147483647
float 32 от 3.4е-38 до 3.4е+38
double 64 от 1.7е-308 до 1.7e+308
long double 80 от 3.4е-4932 до 1.1e+4932

Таблица  содержит информацию о 32-битных типах данных.

Таблица Все допустимые комбинации базовых типов и модификаторов дпя 32-битных слов
Тип Длина в битах Диапазон от-128 до 127
char 8 от 128 до 127
unsigned char 8 от 0 до 255
signed char 8 от -128 до 127
int 32 от -2147483648 до 2147483647
unsigned int
32
от 0 до 4294967295
signed int 32 от -2147483648 до 2147483647
short int 16 от -32768 до 32767
unsigned short int 16 от 0 до 65535
signed short int 16 от -32768 до 32767
long int 32 от -2147483648 до 2147483647
unsigned long int 32 от 0 до 4294967295
signed long int 32 от -2147483648 до 2147483647
float 32 от 3. 4e-38 до 3.4е+38
double 64 от 1.7е-308 до 1.7е+308
long double 80 от 3.4е-4932 до 1.1e+4932

Использование signed для целочисленных типов является избыточным (но допустимым), поскольку объявление целочисленных типов по умолчанию предполагает знаковое число.

Различие между знаковыми и беззнаковыми целочисленными типами заключается в способе интерпретации старшего бита. Если используется знаковый тип, то компилятор генерирует код, предполагающий, что старший бит используется как знак числа. Если знаковый бит равен 0, то число положительное, а если 1 — отрицательное. Ниже приведены простые примеры:

Следует предупредить, что фактически все компьютеры используют дополнительную арифметику, что приводит к представлению —127 в виде, слегка отличном от вышеприведенного примера. Тем не менее, использование знакового бита является однотипным. У отрицательного числа в дополнительном виде все биты инвертированы, и к числу добавляется 1. Например, —127 в дополнительном виде выглядит следующим образом:

1111111110000001

Знаковые числа важны для многих алгоритмов, но они могут вмещать только половину значений, которые могут содержать их беззнаковые «братья». Например, 32767 выглядит следующим образом:

01111111 11111111

Если старший бит установлен в 1, то число будет интерпретироваться как —1. Тем не менее, если объявить его как unsigned int, то, если старший бит установлен, число будет содержать 65535.
 

‹ Типы данных Вверх Модификаторы доступа ›

Как сохранить какой-то» null » в переменной c++ double или int?

у меня есть класс, который выглядит так

struct A {
     double a1;
     int b1;
     double a2;
     int b2;
};

я должен прочитать значения файла для a1, b1, a2 и b2. Большую часть времени все четыре числа находятся в файле, но иногда есть только два числа.

когда есть два числа, я хочу сохранить значения в a1 и b1 и я хочу сохранить «ничего» в a2 и b2. Если a2 и b2 были указатели, я мог бы просто назначить их nullptr, но они не указатели.

есть ли что-то, что я могу хранить в double

и int переменные, указывающие, что «ничего» не хранится?

Я знаю Boost.Optional доступно, но я пытаюсь избежать этой библиотеки.


вы можете назначить NAN двойному a2, что также указывает на недопустимость int b2.

на этой странице для использования NAN.