Другие языки программирования и технологии

Спецификаторы типов переменных

Правильно ли я понимаю:
Есть основные типы: int, double, float, char, string
Есть спецификаторы:
signed - он стандартный и его указывать нет смысла.
long - удваивает диапазон ( я видел long long, его можно сколько нужно раз писать -удваивать? Так можно со всеми спецификаторами?)
Short - уменьшает на два.
Unsigned - увеличивает на два, только для положительных.
Я так понимаю, это Си?
1. Нет такого базового типа string
2. Есть 5 целочисленных знаковых типов signed char, short int, int, long int, long long int. Для каждого из них гарантируется некий минимальный (но не строго определенный) диапазон возможных значений.
3. Для каждого знакового целочисленного типа существует соответствующий ему беззнаковый, занимающий такой же объем памяти.
4. для любых двух целочисленных типов одинаковой "знаковости" и различными (хз как это по русски) coversion rank, множество значений "младшего" типа является подмножеством "старшего"
5. множество неотрицательных значений знакового типа является подмножеством значений соответствующего ему беззнакового.
6. три типа с плавающей точкой - float, double и long double. Множество значений предыдущего является подмножеством следующего.
7. char без спецификаторов - для символов, может быть как знаковым, так и беззнаковым (зависит от реализации). Гарантируется только, что базовый набор символов кодируется неотрицательными значениями и общий диапазон значений соответствует signed char или unsigned char.

И никакого "удваивает диапазон", "уменьшает на 2" и "увеличивает на 2" нет.
Архат Темирбаев
Архат Темирбаев
25 516
Лучший ответ
Не совсем так. Если возьмём язык C, то (sizeof - объём памяти, отводимый под значение указанного типа):

1. sizeof(char) = 1

2. sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int) <= sizeof(long long int). Не строгое увеличение - может быть и равенство размеров.

3. sizeof(float) <= sizeof(double) <= sizeof(long double)

3. unsigned не меняет размер, но меняет интерпретацию хранимого значения.

4. string не является базовым типом.
Ошибка в переводе. Тип long - это тип удвоенной точности. 32-битное число. А long long - 64-битное.
ага, написать long long long long int, и попрёт 128-битная арифметика из коробки.