Диапазоны типов данных | Microsoft Docs
- Чтение занимает 2 мин
В этой статье
Компиляторы Microsoft C++ 32-bit и 64-bit распознают типы в таблице далее в этой статье.
int(unsigned int)__int8(unsigned __int8)__int16(unsigned __int16)__int32(unsigned __int32)__int64(unsigned __int64)short(unsigned short)long(unsigned long)long long(unsigned long long)
Если имя начинается с двух символов подчеркивания (__), тип данных является нестандартным.
Диапазоны, представленные в следующей таблице, включают указанные значения.
| Имя типа | Байты | Другие имена | Диапазон значений |
|---|---|---|---|
int | 4 | signed | От -2 147 483 648 до 2 147 483 647 |
unsigned int | 4 | unsigned | От 0 до 4 294 967 295 |
__int8 | 1 | char | От -128 до 127 |
unsigned __int8 | 1 | unsigned char | От 0 до 255 |
__int16 | 2 | short, short int, signed short int | От -32 768 до 32 767 |
unsigned __int16 | 2 | unsigned short, unsigned short int | От 0 до 65 535 |
__int32 | 4 | signed, signed int, int | От -2 147 483 648 до 2 147 483 647 |
unsigned __int32 | 4 | unsigned, unsigned int | От 0 до 4 294 967 295 |
__int64 | 8 | long long, signed long long | От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
unsigned __int64 | 8 | unsigned long long | От 0 до 18 446 744 073 709 551 615 |
bool | 1 | нет | false или true |
char | 1 | нет | от-128 до 127 по умолчанию от 0 до 255 при компиляции с помощью |
signed char | 1 | нет | От -128 до 127 |
unsigned char | 1 | нет | От 0 до 255 |
short | 2 | short int, signed short int | От -32 768 до 32 767 |
unsigned short | 2 | unsigned short int | От 0 до 65 535 |
long | 4 | long int, signed long int | От -2 147 483 648 до 2 147 483 647 |
unsigned long | 4 | unsigned long int | От 0 до 4 294 967 295 |
long long | 8 | нет (но эквивалентно __int64 ) | От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
unsigned long long | 8 | нет (но эквивалентно unsigned __int64 ) | От 0 до 18 446 744 073 709 551 615 |
enum | непостоянно | нет | |
float | 4 | нет | 3,4E +/- 38 (7 знаков) |
double | 8 | нет | 1,7E +/- 308 (15 знаков) |
long double | то же, что double | нет | То же, что double |
wchar_t | 2 | __wchar_t | От 0 до 65 535 |
В зависимости от того, как он используется, переменная __wchar_t определяет либо тип расширенного символа, либо многобайтовый символ. Чтобы указать константу расширенного символьного типа, перед символьной или строковой константой следует использовать префикс L .
signed и unsigned — это модификаторы, которые можно использовать с любым целочисленным типом, за исключением bool . Обратите внимание, что char , signed char и unsigned char — это три различных типа для таких механизмов, как перегрузка и шаблоны.
int Типы и unsigned int имеют размер четыре байта. Однако переносимый код не должен зависеть от размера, int так как языковой стандарт позволяет реализовать его в зависимости от реализации.
C и C++ в Visual Studio также поддерживают целочисленные типы с указанием размера. Дополнительные сведения см. в разделе __int8, __int16, __int32, __int64
Дополнительные сведения об ограничениях размеров каждого типа см. в разделе Встроенные типы.
Диапазон перечисляемых типов зависит от контекста языка и указанных флажков компилятора. Дополнительные сведения см. в статьях Объявления перечислений C и Объявления перечислений C++.
См. также раздел
Ключевые слова
Встроенные типы
Урок 002. Типы данных, Переменные и Арифметика
Каждая переменная или выражение имеет свой тип данных, например, объявление
int some_variable;
указывает, что переменная some_variable имеет целочисленный тип int.
Объявление позволяет ввести некую переменную в программу. Данная переменная будет обладать неким типом данных: целочисленный, с плавающей запятой, символьный в случае базовых типов данных, или кастомный тип (структура данных, класс). Тип переменной определяет набор операций, которые можно произвести над переменной. Объявление переменной определяет выделение области памяти, которая требуется для неё. А также значение этой переменной, которое с точки зрения компьютера будет являться последовательностью битов. Объявление переменной также несёт в себе то имя, по которому программист будет обращаться к данной переменной в программном коде.
В выше приведенном примере имеем переменную, которая имеет базовый целочисленный тип, с которыми могут производиться арифметические действия, действия сравнения, присваивания и т.д. Обращаться в программном коде к этой переменной будем по имени some_variable.
Фундаментальные типы данных
C++ предоставляет следующие фундаментальные типы данных.
void
void — является типом данных с пустым набором значений. Является незавершённым и не может быть установлен для объектов и переменных. Однако, позволяется использовать указатели на тип void, а также использовать void в качестве значения, возвращаемого функциями.
nullptr
nullptr — особый тип данных, который сам себе не является типом как таковым, поскольку его нельзя установить в качестве типа переменной, но он может использоваться в качестве нулевого указателя. Данный тип был введён в стандарте С++11 вместо определяемой реализацией нулевой макроконстанты NULL.
boolean
bool — логический тип данных, которые принимает значение true или false . Размер памяти, которую занимает данный тип данных может отличаться от 1 в зависимости от реализации в целевой системе. Определить размер можно с помощью оператора sizeof(bool).
Символьные типы
char — Символьные типы используются для представления текстовых символов. Размер символьного типа char 1 байт, что позволяет содержать 256 различных символов. Представление всех символов можно найти в таблице символов ASCII.
Символьные типы данных делятся на три типа:
- signed char — знаковый тип
- unsigned char — беззнаковый тип
- char — отдельный тип, который может быть как знаковым, так и беззнаковым, в зависимости от того, как отработает код компилятор.
Различие в диапазоне значений, например:
- char -128…127
- unsigned char 0…255
char может использоваться для хранения целочисленных значений, которые не превышают одного байта, но лучше использовать для целочисленных значений всё-таки тип Int. Но такое допустимо для встраиваемых систем, с жёстко ограниченным объёмом памяти.
Также имеются особые типы символьных данных:
- wchar_t — тип для представления символов, которым недостаточно одного байта. Это может быть 32 бита для ОС, поддерживающих UNICODE, или 16 бит в нотации Windows для UTF-16.
- char16_t — тип для представления UTF-16, введён в стандарте C++11 .
- char32_t — тип для представления UTF-32, введён в стандарте C++11 .
int
int — целочисленный тип данных. Могут использоваться модификаторы, определяющие размер памяти, выделяемый под этот тип данных. Если нет модификаторов, то гарантируется, что размер типа данных не менее 16-ти бит. Однако, на большинстве 32/64 разрядных систем гарантируется, что занимаемый размер не менее 32-х бит.
Модификаторы
Знаковые модификаторы
- signed — представление знакового типа данных (если опущено, то подразумевается по умолчанию)
- unsigned — представление беззнакового типа данных.
Модификаторы размера
- short — целевой тип оптимизируется, чтобы размер был не менее 16 бит
- long — целевой тип оптимизируется, чтобы размер был не менее 32 бит
Модификатор long можно применять к типу данных дважды, что даёт оптимизацию занимаемого переменной пространства не менее 64 бит. Данная оптимизация введена в стандарте C++11.
long long int
Модификаторы размера и знаковости можно также комбинировать.
signed long long int
Типы данных с плавающей точкой
- float — 32-х разрядный тип данных с плавающей точкой.
- double — 64-х разрядный тип данных с плавающей точкой.
- long double — расширенный тип данных с плавающей точкой, введён в стандарте C++11.
Кстати, при разработке программного обеспечения можно заметить по использованию этих типов данных, какой разработчик начинал с чистого C, а какой начинал с C++. Поголовное использование float характерно для разработчиков, которые начинали с C, double же характерен для C++ разработчиков.
Переменные
Таким образом, переменные могут иметь типы данных, перечисленные выше, например:
int a = 12; // Целочисленный тип, переменная равна 12 double b = 12.25; // Вещественный тип с плавающей точкой двойной точности, переменная равна 12.25 char c = 'a'; // Символьный тип, переменная равна символу "a"
Инициализация переменных может производиться несколькими способами.
double a1 = 2.3;
double a2 = {2.3};
double a3 {2.3};Инициализация с фигурными скобками была введена в стандарте C++11. При инициализации фигурными скобками не позволяется неявное преобразование, поэтому компилятор выдаст ошибку в следующих случаях.
int d1 = {2.3};
int d2 {2.3};auto
Также для объявления переменных в стандарте C++11 был введён спецификатор auto , который позволяет объявлять переменную, без указания типа. В данном случае тип выводится из инициализатора, то есть значения, которое будет присвоено переменной. Таким образом auto невозможно использовать без инициализатора, то есть
// Правильный, рабочий вариант auto a = 14; // Не правильный вариант, не скомпилируется auto b; b = 15;
Спецификатор auto может использоваться для объявления лямбда функций, или переменных с очень сложным объявлением, что ведёт к упрощению программного кода.
Арифметика
Над переменными базовых типов можно выполнять различные арифметически операции:
x+y // сложение +x // унарный плюс x-y // вычитание -x // унарный минус x*y // умножение x/y // деление x%y // остаток от деления
Также возможно использование операций сравнение:
x==y // равно x!=y // не равно x<y // меньше чем x>y // больше чем x<=y // меньше чем или равно x>=y // больше чем или равно
В дополнение к арифметическим и логическим операциям функционал C++ предлагает более специфические операции:
x+=y // x = x+y ++x // increment: x = x+1 x−=y // x = x-y −−x // decrement: x = x-1 x∗=y // x =x*y x/=y // x = x/y x%=y // x = x%y
Типы данных в Go | DigitalOcean
Введение
Типы данных определяют виды значений, которые сохраняются определенными переменными при написании программы. Типы данных также помогают определить операции, которые можно выполнять с использованием данных.
В этой статье мы рассмотрим наиболее важные типы данных в Go. Это не исчерпывающее исследование типов данных, но оно поможет вам поближе познакомиться с доступными в Go возможностями. Понимание основных типов данных поможет писать более эффективный и понятный код.
Базовая информация
Чтобы лучше понять типы данных следует посмотреть на различные типы данных, которые мы используем в реальном мире. Например, в реальном мире мы используем числа. Это могут быть положительные числа (0, 1, 2, …), целые числа (…, -1, 0, 1, …) и, например, иррациональные числа (π).
Обычно в математике мы можем сочетать числа разных типов и получать определенный ответ. Например, мы можем выполнить операцию сложения 5 и π:
5 + π
Мы можем сохранить уравнения как ответ, чтобы учитывать иррациональное число, или округлить π до числа с уменьшенным количеством знаков после запятой, а затем сложить числа:
5 + π = 5 + 3.14 = 8.14
Однако если мы попробуем оценить числа с помощью другого типа данных, такого как слова, выражения будут иметь меньше смысла. Как мы решим следующее уравнение?
shark + 8
Для компьютеров все типы данных отличаются, как слова и числа. В результате нам нужно осторожно подходить к использованию различных типов данных для назначения значений и манипуляции этими значениями посредством операций.
Целые числа
Как и в математике, в программировании к целым числам относятся положительные числа, отрицательные числа и 0 (…, -1, 0, 1, …). В Go целое число определяется как int. Как и в других языках программирования, в числах не следует использовать запятые для отделения нулей, так что вместо 1,000 нужно писать 1000.
Целое число можно вывести в простой форме:
fmt.Println(-459)
Output
-459
Также мы можем декларировать переменную, которая будет выступать как символ используемого или изменяемого числа, например:
var absoluteZero int = -459
fmt.Println(absoluteZero)
Output
-459
В Go можно выполнять математические операции с целыми числами. В следующем блоке кода мы используем оператор назначения := для декларирования и инициализации переменной sum:
sum := 116 - 68
fmt.Println(sum)
Output
48
Как видно на экране результатов, математический оператор - был использован для вычитания целого числа 68 из 116, в результате чего получилось 48. Дополнительную информацию о декларировании переменных можно найти в разделе Объявление типов данных для переменных.
Целые числа можно использовать в программах Go разными способами. По мере дальнейшего изучения Go у вас появится много возможностей работать с целыми числами и развивать знания об этом типе данных.
Числа с плавающей запятой
Число с плавающей точкой *или float *— это действительное число, которое нельзя выразить в форме целого числа. В состав действительных чисел входят все рациональные и иррациональные числа, и поэтому числа с плавающей точкой могут содержать дробную часть, например 9,0 или -116,42. Чтобы представить тип float в программе Go, подумайте о числе с десятичной запятой.
Мы можем вывести число с плавающей запятой так же легко, как и целое число:
fmt.Println(-459.67)
Output
-459.67
Также мы можем объявить переменную, которая будет представлять число типа float:
absoluteZero := -459.67
fmt.Println(absoluteZero)
Output
-459.67
В Go можно выполнять математические операции с числами с плавающей точкой, как и с целыми числами:
var sum = 564.0 + 365.24
fmt.Println(sum)
Output
929.24
При работе с целыми числами и числами с плавающей точкой важно помнить, что 3 ≠ 3.0, поскольку 3 означает целое число, а 3.0 — число с плавающей точкой.
Размеры числовых типов
Помимо различия между целыми числами и числами с плавающей точкой, в Go имеется два типа числовых данных, которые различаются по статическому или динамическому характеру их размера. Первый тип — это архитектурно-независимый тип, и это означает, что размер данных в битах не изменяется вне зависимости от того, на какой машине выполняется код.
Сегодня большинство системных архитектур представляют собой 32-битные или 64-битные архитектуры. Например, вы можете разрабатывать приложения для современных ноутбуков с 64-битной операционной системой Windows. Однако, если вы разрабатывает приложения для таких устройств, как фитнес-браслеты, вам может потребоваться 32-битная архитектура. Если вы используете архитектурно-независимый тип, например int32, вне зависимости от компилируемой архитектуры, у этого типа будет постоянный размер.
Второй тип относится к конкретному варианту реализации. В этом типе разрядность может отличаться в зависимости от архитектуры, на базе которой построена программа. Например, если мы используем тип int при компиляции в Go для 32-битной архитектуры, размер типа данных будет составлять 32 бита. Если программа компилируется для 64-битной архитектуры, размер переменной будет составлять 64 бита.
Помимо разных размеров, такие типы данных, как целые числа, могут иметь два базовых типа: со знаком и без знака. int8 — это целое число со знаком, которое может иметь значение от -128 до 127. uint8 — целое число без знака, которое может иметь только положительное значение от 0 до 255.
Диапазоны зависят от размера в битах. Для двоичных данных 8 бит могут представлять 256 разных значений. Поскольку тип int должен поддерживать как положительные, так и отрицательные значения, 8-битное целое число (int8) будет иметь диапазон от -128 до 127, что соответствует 256 возможных уникальных значений.
В Go имеются следующие архитектурно-независимые типы целых чисел:
uint8 unsigned 8-bit integers (0 to 255)
uint16 unsigned 16-bit integers (0 to 65535)
uint32 unsigned 32-bit integers (0 to 4294967295)
uint64 unsigned 64-bit integers (0 to 18446744073709551615)
int8 signed 8-bit integers (-128 to 127)
int16 signed 16-bit integers (-32768 to 32767)
int32 signed 32-bit integers (-2147483648 to 2147483647)
int64 signed 64-bit integers (-9223372036854775808 to 9223372036854775807)
Числа с плавающей точкой и комплексные числа также могут иметь разные размеры:
float32 IEEE-754 32-bit floating-point numbers
float64 IEEE-754 64-bit floating-point numbers
complex64 complex numbers with float32 real and imaginary parts
complex128 complex numbers with float64 real and imaginary parts
Также существует несколько типов псевдонимов чисел, которые присваивают полезные имена определенным типам данных:
byte alias for uint8
rune alias for int32
Псевдоним byte дает понять, что ваша программа использует в качестве единицы измерения элементов символьной строки байты, а не малые целые числа, не связанные с измерением данных в байтах. Хотя после компиляции программы byte и uint8 будут идентичны, byte часто используется для представления символьных данных в числовой форме, а uint8 предполагается как число в программе.
Псевдоним rune немного отличается от вышеописанного. Если byte и uint8 содержат одни и те же данные, rune может представлять собой один байт или четыре байта, определенный в int32 диапазон. rune используется для представления символа Unicode, в то время как символы ASCII может представлять только тип данных int32.
Кроме того, в Go имеются следующие типы для конркретных реализаций:
uint unsigned, either 32 or 64 bits
int signed, either 32 or 64 bits
uintptr unsigned integer large enough to store the uninterpreted bits of a pointer value
Размер типов для конкретных реализаций определяется архитектурой, для которой скомпилирована программа.
Выбор числовых типов данных
Выбор правильного размера больше зависит от производительности целевой архитектуры, чем от размера данных, с которыми вы работаете. Однако если вы не знаете особые требования вашей программы к производительности, в начале работы вы можете следовать некоторым из этих базовых рекомендаций.
Как обсуждалось ранее в этой статье, существуют типы, не зависящие от архитектуры, и типы, зависящие от реализации. Для целочисленных данных в Go обычно используются такие типы реализации, как int или uint вместо int64 или uint64. Обычно это обеспечивает более высокую скорость обработки в целевой архитектуре. Например, если вы используете int64 и выполняете компиляцию до 32-битной архитектуры, обработка этих значений займет в два раза меньше времени, поскольку для перемещения данных по архитектуре требуются дополнительные процессорные циклы. Если вы использовали int, программа определяет 32-битный размер для 32-битной архитектуры, в результате чего обработка будет значительно быстрее.
Если вы не хотите выходить за пределы определенного диапазона размеров, выбор архитектурно-независимого типа может увеличить скорость и снизить нагрузку на память. Например, если вы знаете, что ваши данные не превысят значение 100 и будут только положительными числами, выбор uint8 сделает вашу программу более эффективной, поскольку для нее будет требоваться меньше памяти.
Мы рассмотрели некоторые возможные диапазоны типов числовых данных. Теперь посмотрим, что произойдет в случае превышения этих диапазонов в нашей программе.
Переполнение и циклический переход
При попытке сохранения значения, превышающего возможности типа данных, в Go возможны переполнение или циклический переход, в зависимости от того, рассчитывается ли значение при компиляции или во время исполнения Ошибка при компиляции возникает, если программа обнаруживает ошибку при попытке сборки программы. Ошибка времени исполнения возникает во время фактического выполнения уже скомпилированной программы.
В следующем прмере мы зададим для maxUint32 максимальное значение:
package main
import "fmt"
func main() {
var maxUint32 uint32 = 4294967295 // Max uint32 size
fmt.Println(maxUint32)
}
После компиляции и запуска получим следующий результат:
Output
4294967295
Если мы прибавим 1 к значению времени исполнения, произойдет циклический переход на 0:
Output
0
Теперь изменим программу, чтобы прибавить 1 к переменной при ее назначении, то есть до компиляции:
package main
import "fmt"
func main() {
var maxUint32 uint32 = 4294967295 + 1
fmt.Println(maxUint32)
}
Во время компиляции, если компилятор определяет, что значение слишком большое для заданного типа данных, он выводит сообщение об ошибке переполнения. Это означает, что рассчитанное значение слишком большое для заданного типа данных.
Поскольку компилятор может определить переполнение, он выведет сообщение об ошибке:
Output
prog.go:6:36: constant 4294967296 overflows uint32
Понимание ограничений данных поможет избежать потенциальных ошибок программы в будущем.
Мы поговорили о числовых типах, и теперь пришло время перейти к хранению логических значений.
Логические операторы
Тип данных boolean может иметь значение истина или ложь и определяется как bool при декларировании. Логические операторы используются для представления значений истины, связанных с логическим ответвлением математики, которое информирует алгоритмы в информатике.
Значения true и false всегда обозначаются символами t и f в нижнем регистре, поскольку эти идентификаторы заранее декларированы в Go.
Многие математические операции дают ответы, соответствующие значениям «истина» или «ложь»:
- больше чем
- 500 > 100 истина
- 1 > 5 ложь
- меньше чем
- 200 < 400 истина
- 4 < 2 ложь
- равно
- 5 = 5 истина
- 500 = 400 ложь
Как и для чисел, значения логических операторов могут храниться в переменных:
myBool := 5 > 8
Мы можем распечатать значение логического оператора посредством вызова функции fmt.Println():
fmt.Println(myBool)
Поскольку 5 не больше 8, мы получим следующий результат:
Output
false
Чем больше программ вы напишете на Go, тем лучше вы поймете принципы работы логических операторов и влияние оценки истинности и ложности разных функций или операций на выполнение программы.
Строки
Строка — это последовательность из одного или нескольких символов (буквы, числа, символы), которая может представлять собой константу или переменную. Строки существуют внутри одинарных кавычек ` или двойных кавычек " в Go и имеют разные характеристики в зависимости от типа кавычек.
Если вы используете одинарные кавычки, вы создаете необработанный строковый литерал. Если вы используете двойные кавычки, вы создаете интерпретируемый строковый литерал.
Необработанные литералы строк
Необработанные строковые литералы — это последовательности символов между одинарными кавычками. Каждый символ внутри кавычек будет выглядеть точно так же, как он отображается, за исключением самих символов одинарных кавычек.
a := `Say "hello" to Go!`
fmt.Println(a)
Output
Say "hello" to Go!
Специальные символы в строках обычно обозначаются обратной косой чертой. Например, в интерпретируемой строке \n представляет новую строчку в строке. Однако внутри необработанных литералов строк обратная косая черта не имеет особого значения:
a := `Say "hello" to Go!\n`
fmt.Println(a)
Поскольку в литерале строки обратная косая черта не имеет особого значения, программа будет выводить значение \n вместо создания новой строки:
Output
Say "hello" to Go!\n
Необработанные литералы строк также могут использоваться для создания строк, включающих несколько строчек:
a := `This string is on
multiple lines
within a single back
quote on either side.`
fmt.Println(a)
Output
This string is on
multiple lines
within a single back
quote on either side.
В предыдущих блоках кода новые строчки буквально переносились из входных данных в результаты.
Интерпретируемые литералы строк
Интерпретируемые строковые литералы — это последовательность символов внутри двойных кавычек, например, "bar". Внутри кавычек может находиться любой символ, кроме символа новой строчки и незакрытых двойных кавычек. Для отображения двойных кавычек в интерпретируемой строке вы можете использовать обратную косую черту в качестве символа перехода:
a := "Say \"hello\" to Go!"
fmt.Println(a)
Output
Say "hello" to Go!
Практически всегда вы будете использовать интерпретируемые строковые литералы, поскольку они позволяют выполнять экранирование символов внутри строк. Дополнительную информацию о строках можно найти в статье, посвященной основам работы со строками в Go.
Строки с символами UTF-8
UTF-8 — это схема кодировки, используемая для кодировки символов переменной ширины в 1-4 байтах. Go поддерживает символы UTF-8 без специальных настроек, библиотек или пакетов. Латинские символы, такие как буква A, могут быть представлены значением ASCII, например, числом 65. Однако при использовании специальных символов, таких как международный символ 世, требуется UTF-8. Go использует тип псевдонима rune для данных UTF-8.
a := "Hello, 世界"
Вы можете использовать ключевое слово range в цикле for для индексации любых строк в Go, в том числе строк UTF-8. Мы более подробно расскажем о циклах for и о ключевом слове range позднее, а сейчас важно помнить, что мы можем использовать их для подсчета количества байт в строке:
package main
import "fmt"
func main() {
a := "Hello, 世界"
for i, c := range a {
fmt.Printf("%d: %s\n", i, string(c))
}
fmt.Println("length of 'Hello, 世界': ", len(a))
}
В блоке кода выше мы декларировали переменную a и назначили для нее значение Hello, 世界. Назначенный текст содержит символы UTF-8.
Затем мы использовали стандартный цикл for и ключевое слово range. В Go ключевое слово range индексирует строку, возвращая по одному символу, а также выполняет байтовую индексацию символа в строке.
С помощью функции fmt.Printf мы выводим строку формата %d: %s\n. %d — это печатное обозначение цифры (в данном случае целого числа), а %s — обозначение строки. Затем мы задали значения i или текущего индекса цикла for,а также c, который представляет текущий символ цикла for.
В заключение мы распечатали полную переменную a с помощью встроенной функции len.
Мы уже упоминали, что rune является псевдонимом int32 и может состоять из 1-4 байт. Для определения символа 世 требуется три байта, и индекс перемещается соответствующим образом при изменении диапазона в строке UTF-8. По этой причине печать i не выполняется последовательно.
Output
0: H
1: e
2: l
3: l
4: o
5: ,
6:
7: 世
10: 界
length of 'Hello, 世界': 13
Как видите, длина превышает количество проходов диапазона строки.
Вы не всегда будете использовать строки UTF-8, но теперь вы понимаете, почему они относятся к типу rune, а не int32.
Декларирование типов данных для переменных
Вы узнали о разных типах данных примитивов, и теперь мы перейдем к назначению этих типов для переменных в Go.
В Go мы можем определять переменные с помощью ключевого слова var, за которым идут имя переменной и желаемый тип данных.
В следующем примере мы декларируем переменную с именем pi типа float64.
В первую очередь декларируется ключевое слово var:
var pi float64
Далее идет имя переменной pi:
var pi float64
Последним идет тип данных float64:
var pi float64
При желании мы можем задать начальное значение, например, 3.14:
var pi float64 = 3.14
Go — это язык статических типов. Использование статических типов означает, что каждое выражение в программе проверяется во время компиляции. Также это означает, что тип данных привязан к переменной, как в динамически связанных языках тип данных привязан к значению.
Например, в Go тип декларируется при декларировании переменной:
var pi float64 = 3.14
var week int = 7
Каждая из этих переменных может соответствовать отдельному типу данных, если вы декларировали их по разному.
Этим Go отличается от таких языков как PHP, где тип данных привязывается к значению:
$s = "sammy"; // $s is automatically a string
$s = 123; // $s is automatically an integer
В предыдущем блоке кода первая переменная $s является строкой, поскольку ей присвоено значение "sammy", а вторая являетя целым числом, поскольку ей присвоено значение 123.
Теперь рассмотрим более сложные типы данных — массивы.
Массивы
Массив представляет собой упорядоченную последовательность элементов. Вместимость массива определяется во время создания. После определения размера массива его нельзя изменить. Поскольку массив имеет статичный размер, память для него выделяется только один раз. Это делает массивы менее гибкими, но повышает производительность вашей программы. Поэтому массивы обычно используются при оптимизации программ. Срезы, о которых мы поговорим позднее, являются более гибкими и соответствуют общепринятой концепции массивов, применяемой в других языках.
Массивы определяются посредством декларирования размера массива и типа данных с определением значений внутри фигурных скобок { }.
Массив строк должен выглядеть следующим образом:
[3]string{"blue coral", "staghorn coral", "pillar coral"}
Мы можем сохранить массив в переменной и распечатать его:
coral := [3]string{"blue coral", "staghorn coral", "pillar coral"}
fmt.Println(coral)
Output
[blue coral staghorn coral pillar coral]
Как мы уже говорили, срезы похожи на массивы, но при этом более гибкие. Рассмотрим следующий мутируемый тип данных.
Срезы
Срезы — это упорядоченная последовательность элементов, длина которых может изменяться. Размер срезов может увеличиваться динамически. Если при добавлении в срез новых элементов в срезе оказывается недостаточно памяти, он запрашивает в системе дополнительную память по мере необходимости. Поскольку срез можно расширить для добавления дополнительных элементов, они используются чаще, чем массивы.
Срезы определяются посредством декларирования типа данных, которому предшествуют открывающая и закрывающая квадратные скобки [], а значения указываются в фигурных скобках { }.
Срез целых чисел выглядит следующим образом:
[]int{-3, -2, -1, 0, 1, 2, 3}
Срез чисел с плавающей точкой выглядит следующим образом:
[]float64{3.14, 9.23, 111.11, 312.12, 1.05}
Срез строк выглядит следующим образом:
[]string{"shark", "cuttlefish", "squid", "mantis shrimp"}
Определим срез строк как seaCreatures:
seaCreatures := []string{"shark", "cuttlefish", "squid", "mantis shrimp"}
Мы можем распечатать его посредством вызова переменной:
fmt.Println(seaCreatures)
Выводимые результаты будут выглядеть точно так, как созданный нами список:
Output
[shark cuttlefish squid mantis shrimp]
Мы можем использовать ключевое слово append для добавления элементов в срез. Следующая команда добавляет значение строки seahorse в срез:
seaCreatures = append(seaCreatures, "seahorse")
Вы можете проверить его добавление посредством вывода значений:
fmt.Println(seaCreatures)
Output
[shark cuttlefish squid mantis shrimp seahorse]
Как видите, если вам требуется управление неизвестным количеством элементов, срез будет более гибким, чем массив.
Карты
Карта — это встроенный в Go тип хэша или словаря. Карты используют пары ключей и значений для хранения данных. Это полезно в программировании для быстрого просмотра значений по индексу или (в данном случае) по ключу. Например, вам может потребоваться карта пользователей с индексацией по идентификатору пользователя. Ключ может быть идентификатором пользователя, а объект пользователя будет значением. Карта создается с помощью ключевого слова map с типом данных ключа в квадратных скобках [ ], за которым идут пары значение и ключ в фигурных скобках.
map[key]value{}
Карты обычно используются для хранения связанных данных, в том числе информации из идентификаторов, и выглядят следующим образом:
map[string]string{"name": "Sammy", "animal": "shark", "color": "blue", "location": "ocean"}
Обратите внимание, что помимо фигурных скобок карта содержит двоеточия. Слова слева от двоеточий являются ключами. Ключи могут относится к любому *comparable *типу в Go. Сравнимые типы — это типы примитивов, в том числе строки, целые числа и т. д. Тип примитива определяется языком, а не составляется посредством сочетания других типов. Хотя допускается использование определяемых пользователем типов, во избежание ошибок программирования их лучше оставлять простыми. В словаре выше содержатся ключи: name, animal, color и location.
Слова справа от двоеточий являются значениями. Значения могут состоять из любого типа данных. Значения в словаре выше: Sammy, shark, blue и ocean.
Давайте сохраним карту внутри переменной и выведем ее:
sammy := map[string]string{"name": "Sammy", "animal": "shark", "color": "blue", "location": "ocean"}
fmt.Println(sammy)
Output
map[animal:shark color:blue location:ocean name:Sammy]
Если мы хотим изолировать цвет Sammy, мы можем использовать вызов sammy["color"]. Распечатаем результат:
fmt.Println(sammy["color"])
Output
blue
Поскольку карты предоставляют пары ключ-значение для хранения данных, они могут стать важным элементом вашей программы Go.
Заключение
Теперь вы должны лучше понимать основные типы данных, доступные для использования в Go. Каждый из этих типов данных важен при разработке проектов на языке Go.
Когда вы разберетесь с доступными типами данных в Go, вы также можете изучить конвертацию типов данных, чтобы иметь возможность изменять типы данных в зависимости от ситуации.
В языке C также существуют перечислимый тип – enum , который является подмножеством целого типа, и пустой тип – void, который имеет специальное назначение. Он используется для объявления функций, которые не возвращают никакого значения, а также для объявления указателей на значение типа void. Такие указатели могут быть преобразованы к указателям на любой другой тип. В языке С можно объявлять структуры и так называемые объединения. В языке C нет специальных типов для массивов, строк (которые представляются массивом символов), и для логических значений. Логические значения представляются данными целого типа, при этом значение 0 соответствует логическому значению ложь, а все остальные целые значения соответствуют логическому значению истина. Этим свойством языка C можно пользоваться, например, следующим образом: значение некоторой переменной, равное 0, говорит об отсутствии некоторого признака у объекта, а остальные значения говорят о его наличии, и при этом несут какую-либо дополнительную информацию. В языке С контроль типов не так силён, как в Паскале. Вы можете выполнять любые разумные присвоения между переменными разных типов. Кроме того, при выполнении большинства операций производятся преобразования по умолчанию для приведения операндов к одному и тому же типу:
В языке С нет операций преобразованием между символом и кодом символа, т.к. в оперативной памяти символ и так храниться в виде его кода. Поэтому можно к переменной, хранящей символ, прибавить 1 и получить следующий символ. Контроль типов языка С можно (но не нужно!) обойти с помощью операции приведения типа. |
Типы данных C ++ | Портал информатики для гиков
Все переменные используют тип данных во время объявления, чтобы ограничить тип данных, которые будут сохранены. Следовательно, мы можем сказать, что типы данных используются, чтобы сообщать переменным тип данных, которые он может хранить. Всякий раз, когда переменная определена в C ++, компилятор выделяет некоторую память для этой переменной на основе типа данных, с которым она объявлена. Каждый тип данных требует разного объема памяти.
Типы данных в C ++ в основном делятся на три типа:
- Примитивные типы данных . Эти типы данных являются встроенными или предопределенными типами данных и могут использоваться пользователем непосредственно для объявления переменных. пример: int, char, float, bool и т. д. Примитивные типы данных, доступные в C ++:
- целое число
- символ
- логический
- Плавающая запятая
- Двойная точка с плавающей точкой
- Бессмысленный или Пустой
- Широкий Характер
- Типы производных данных. Типы данных, полученные из примитивных или встроенных типов данных, называются производными типами данных. Они могут быть четырех типов, а именно:
- функция
- массив
- Указатель
- Ссылка
- Абстрактные или определяемые пользователем типы данных : эти типы данных определяются самим пользователем. Например, определение класса в C ++ или структуры. C ++ предоставляет следующие пользовательские типы данных:
- Учебный класс
- Структура
- союз
- перечисление
- Определяется typedef DataType
В этой статье обсуждаются примитивные типы данных, доступные в C ++.
- Integer : ключевое слово, используемое для целочисленных типов данных, — int . Целые числа, как правило, требуют 4 байта пространства памяти и находятся в диапазоне от -2147483648 до 2147483647.
- Символ : символьный тип данных используется для хранения символов. Ключевое слово, используемое для символьного типа данных — char . Символам, как правило, требуется 1 байт пространства памяти, и он находится в диапазоне от -128 до 127 или от 0 до 255.
- Boolean : логический тип данных используется для хранения логических или логических значений. Булева переменная может хранить либо true, либо false . Ключевое слово, используемое для логического типа данных — bool .
- Плавающая точка : тип данных с плавающей точкой используется для хранения значений с плавающей точкой одинарной точности или десятичных значений. Ключевое слово, используемое для типа данных с плавающей запятой, является float . Переменные с плавающей запятой обычно требуют 4 байта пространства памяти.
- Double Floating Point : тип данных Double Floating Point используется для хранения значений с плавающей запятой двойной точности или десятичных значений. Ключевое слово, используемое для двойного типа данных с плавающей запятой, — double . Двойные переменные обычно требуют 8 байт памяти.
- void : Void означает без какой-либо ценности. Тип данных void представляет собой бесполезную сущность. Пустой тип данных используется для тех функций, которые не возвращают значение.
- Широкий символ : Широкий символьный тип данных также является символьным типом данных, но этот тип данных имеет размер больше, чем обычный 8-битный тип данных. Представлено wchar_t . Обычно это 2 или 4 байта.
Модификаторы типов данных
Как следует из названия, модификаторы типов данных используются со встроенными типами данных для изменения длины данных, которые может содержать конкретный тип данных.63)-1
Примечание . Вышеуказанные значения могут варьироваться от компилятора к компилятору. В приведенном выше примере мы рассмотрели GCC 64 бит.
Мы можем отобразить размер всех типов данных, используя функцию sizeof () и передав ключевое слово типа данных в качестве аргумента этой функции, как показано ниже:
|
Выход:
Size of char : 1 byte Size of int : 4 bytes Size of short int : 2 bytes Size of long int : 8 bytes Size of signed long int : 8 bytes Size of unsigned long int : 8 bytes Size of float : 4 bytes Size of double : 8 bytes Size of wchar_t : 4 bytes
Эта статья предоставлена Суровым Агарвалом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи [email protected]. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
Типы данных C ++
0.00 (0%) 0 votes
Тип данных unsigned. Язык Си
Читайте также
Обработка данных
Обработка данных Подробно тема обработки данных уже обсуждалась в главе 6, а сейчас мы лишь кратко рассмотрим последние модификации в этой области. Сразу отмечу, что расширение возможностей по обработке данных в AS/400 — одно из приоритетных направлений нашей работы.Я уже
Экспорт данных из базы данных Access 2007 в список SharePoint Access 2007 позволяет экспортировать таблицу или другой объект базы данных в различных форматах, таких как внешний файл, база данных dBase или Paradox, файл Lotus 1–2–3, рабочая книга Excel 2007, файл Word 2007 RTF, текстовый файл, документ XML
Перемещение данных из базы данных Access 2007 на узел SharePoint Потребности многих приложений Access 2007 превышают простую потребность в управлении и сборе данных. Часто такие приложения используются многими пользователями организации, а значит, имеют повышенные потребности в
18.1. Архивация данных
18.1. Архивация данных Под архивацией данных следует понимать периодическое создание копий файлов, с которыми вы чаще всего работаете, а также настроек личной записи, которую вы используете для входа в операционную систему.О том, что архивация данных ранее не выполнялась,
Спасение данных из поврежденной базы данных
Спасение данных из поврежденной базы данных Возможно, что все вышеприведенные действия не приведут к восстановлению базы данных. Это означает, что база серьезно повреждена и либо совсем не подлежит восстановлению как единое целое, либо для ее восстановления понадобится
Удаление данных с CD-RW
Удаление данных с CD-RW Программа CloneCD не может удалить данные с перезаписываемого компакт-диска непосредственно перед записью, поэтому CD-RW необходимо очистить заранее.1. Вставьте компакт-диск для многократной записи в привод и щелкните мышью на кнопке Стирание CD-RW.
Базы данных
Базы данных 1. В чем заключаются преимущества нового 32-разрядного Borland Database Engine? Новый 32-разрядный Borland Database Engine включает полностью новое ядро запросов, которое было оптимизировано для работы как с удаленными SQL-серверами, так и с локальными данными. 32-разрядный Borland Database
Проверка введенных данных на уровне процессора баз данных
Проверка введенных данных на уровне процессора баз данных Помимо проверки данных во время ввода информации, следует знать о том, что можно также выполнять проверку и на уровне процессора баз данных. Такая проверка обычно более надежна, поскольку применяется независимо
Обновление базы данных с помощью объекта адаптера данных
Обновление базы данных с помощью объекта адаптера данных Адаптеры данных могут не только заполнять для вас таблицы объекта DataSet. Они могут также поддерживать набор объектов основных SQL-команд, используя их для возвращения модифицированных данных обратно в хранилище
Глава 2 Ввод данных. Типы, или форматы, данных
Глава 2 Ввод данных. Типы, или форматы, данных Работа с документами Excel сопряжена с вводом и обработкой различных данных, то есть ин формации, которая может быть текстовой, числовой, финансовой, статистической и т. д. МУЛЬТИМЕДИЙНЫЙ КУРС Методы ввода и обработки данных
Модель данных <> база данных
Модель данных <> база данных Тот «мир», который был получен в процессе описания и анализа, является черновиком для структур ваших данных. Считается, что логическая модель должна описывать отношения и наборы. Обычная ошибка (и западня, присущая всем инструментам CASE) слепо
Наборы данных
Наборы данных Запрос DML определяет логическую совокупность элементов данных, упорядоченных слева направо, из одного или более столбцов, называемую набором. Запрос может ограничивать спецификацию набора одной строкой или же набор может состоять из множества строк. В
Базы данных (классы для работы с базами данных)
Базы данных (классы для работы с базами данных) В MFC включены несколько классов, обеспечивающую поддержку приложений, работающих с базами данных. В первую очередь это классы ориентированные на работу с ODBC драйверами – CDatabase и CRecordSet. Поддерживаются также новые средства для
6.5 Unsigned
6.5 Unsigned Всегда при сочетании целого без знака и обычного целого обычное целое преобразуется к типу unsigned и результат имеет тип unsigned. Значением является наименьшее целое без знака, равное целому со знаком (mod 2**(размер слова)) (т.е. по мдулю 2**(размер слова)). В дополнительном
Digital Chip
Все данные в языке Си имеют свой тип. Переменные определенных типов занимают в памяти какое-то место, разное в зависимости от типа. В Си нет четкого закрепления количества памяти за определенными типами. Это отдано на реализацию конкретного компилятора под конкретную платформу. Например, переменная типа int в одном компиляторе может занимать в памяти 16 бит, в другом — 32 бита, в третьем — 8 бит. Все определяет конкретный компилятор. Правда, все стремятся к универсализации, и в основном в большинстве компиляторов тип int, например, занимает 2 байта, а тип char — один.
Я в последнее время немного затупил, не мог вспомнить, сколько байт занимает тип double в AVR-GCC. Обычно при программировании контроллеров работаешь с целочисленными типами, типа int и char, а к типам с плавающей точкой прибегаешь не часто, в связи с их ресурсоемкостью.
Поэтому, на будущее, оставлю себе здесь памятку с указанием размеров занимаемой памяти типами данных для компилятора AVR-GCC и диапазон изменения переменных этого типа.
Типы данных в языке Си для компилятора AVR-GCC
| Тип | Размер в байтах (битах) | Интервал изменения |
|---|---|---|
| char | 1 (8) | -128 .. 127 |
| unsigned char | 1 (8) | 0 .. 255 |
| signed char | 1 (8) | -128 .. 127 |
| int | 2 (16) | -32768 .. 32767 |
| unsigned int | 2 (16) | 0 .. 65535 |
| signed int | 2 (16) | -32768 .. 32767 |
| short int | 2 (16) | -32768 .. 32767 |
| unsigned short int | 2 (16) | 0 .. 65535 |
| signed short int | 2 (16) | -32768 .. 32767 |
| long int | 4 (32) | -2147483648 .. 2147483647 |
| unsigned long int | 4 (32) | 0 .. 4294967295 |
| signed long int | 4 (32) | -2147483648 .. 2147483647 |
| float | 4 (32) | 3.4Е-38 .. 3.4Е+38 |
| double | 4 (32) | 3.4Е-38 .. 3.4Е+38 |
| long double | 10 (80) | 3.4Е-4932 .. 3.4Е+4932 |
[stextbox id=»warning» caption=»Обратите внимание»]Реализация типа double в AVR-GCC отступает от стандарта. По стандарту double занимает 64 бита. В AVR-GCC переменная этого типа занимает 32 бита, и соответственно, она эквивалентна переменной с типом float![/stextbox]
В дополнение к этому, в библиотеках AVR-GCC введено несколько производных от стандартных типов. Они описаны в файле stdint.h. Сделано это, наверно, для улучшения наглядности и уменьшения текста программ (ускорения их написания :)). Вот табличка соответствия:
Производные типы от стандартных в языке Си для компилятора AVR-GCC
| Производный тип | Стандартный тип |
|---|---|
| int8_t | signed char |
| uint8_t | unsigned char |
| int16_t | signed int |
| uint16_t | unsigned int |
| int32_t | signed long int |
| uint32_t | unsigned long int |
| int64_t | signed long long int |
| uint64_t | unsigned long long int |
Тип Void
В языке Си есть еще один тип — тип void. Void используется для указания, что функция не возвращает ничего в качестве результата, или не принимает на вход никаких параметров. Этот тип не применяется для объявления переменных, соответственно он не занимает места в памяти.
Home / Руководство пользователя компилятора10.2 Базовые типы данных в ARM C и C ++Описывает основные типы данных, реализованные в ARM C и C ++: Размер и выравнивание основных типов данныхВ следующей таблице указаны размеры и естественное выравнивание основных типов данных. Таблица 10-2 Размер и соответствие типов данных
Выравнивание типов зависит от контекста:
Целое Целые числа представлены в виде дополнения до двух. Низкий
слово длинного ПоплавокВеличины с плавающей запятой хранятся в формате IEEE: Для количества Массивы и указателиСледующие утверждения применяются ко всем указателям на объекты в C и C ++, кроме указателей на члены:
|
Диапазоны типов данных | Документы Microsoft
- 2 минуты на чтение
В этой статье
32-разрядные и 64-разрядные компиляторы Microsoft C ++ распознают типы, указанные в таблице далее в этой статье.
int(беззнаковый int)__int8(беззнаковый __int8)__int16(беззнаковый __int16)__int32(беззнаковый __int32)__int64(беззнаковый __int64)короткий(беззнаковый короткий)длинный(беззнаковый длинный)длинный длинный(беззнаковый длинный длинный)
Если его имя начинается с двух знаков подчеркивания ( __ ), тип данных нестандартный.
Диапазоны, указанные в следующей таблице, включают включительно.
| Название типа | байтов | Другие названия | Диапазон значений |
|---|---|---|---|
внутренний | 4 | подписано | -2 147 483 648 до 2 147 483 647 |
Целое без знака | 4 | без знака | 0 до 4 294 967 295 |
__int8 | 1 | символ | -128 до 127 |
без знака __int8 | 1 | символ без знака | от 0 до 255 |
__int16 | 2 | короткий , короткий внутренний , подписанный короткий внутренний | -32 768 до 32 767 |
без знака __int16 | 2 | беззнаковый короткий , беззнаковый короткий int | 0 до 65 535 |
__int32 | 4 | подпись , подпись внутр , внутр | -2 147 483 648 до 2 147 483 647 |
без знака __int32 | 4 | без знака , без знака int | 0 до 4 294 967 295 |
__int64 | 8 | длинный длинный , подписанный длинный длинный | -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 |
без знака __int64 | 8 | беззнаковый длинный длинный | 0 до 18 446 744 073 709 551 615 |
булев | 1 | нет | ложный или истинный |
символ | 1 | нет | от -128 до 127 по умолчанию от 0 до 255 при компиляции с использованием |
символ со знаком | 1 | нет | -128 до 127 |
символ без знака | 1 | нет | от 0 до 255 |
короткий | 2 | короткое внутреннее , подписанное короткое внутреннее | -32 768 до 32 767 |
короткое без знака | 2 | беззнаковый короткий int | 0 до 65 535 |
длинный | 4 | длинный int , подписанный длинный int | -2 147 483 648 до 2 147 483 647 |
длинное без знака | 4 | беззнаковое длинное целое | 0 до 4 294 967 295 |
длинный длинный | 8 | нет (но эквивалентно __int64 ) | -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 |
беззнаковый длинный длинный | 8 | нет (но эквивалентно беззнаковый __int64 ) | 0 до 18 446 744 073 709 551 615 |
перечисление | варьируется | нет | |
с плавающей запятой | 4 | нет | 3.4E +/- 38 (7 цифр) |
двойной | 8 | нет | 1.7E +/- 308 (15 цифр) |
длинный двойной | как двойной | нет | То же, что двойной |
wchar_t | 2 | __wchar_t | 0 до 65 535 |
В зависимости от того, как она используется, переменная __wchar_t обозначает тип широких символов или многобайтовых символов.Используйте префикс L перед символьной или строковой константой для обозначения константы типа расширенных символов.
со знаком и без знака — это модификаторы, которые можно использовать с любым целочисленным типом, кроме bool . Обратите внимание, что char , signed char и unsigned char — это три разных типа для таких механизмов, как перегрузка и шаблоны.
Типы int и unsigned int имеют размер четыре байта. Однако переносимый код не должен зависеть от размера int , поскольку стандарт языка допускает, чтобы это зависело от реализации.
C / C ++ в Visual Studio также поддерживает целочисленные типы размера. Для получения дополнительной информации см. __int8, __int16, __int32, __int64 и целочисленные ограничения.
Для получения дополнительной информации об ограничениях размеров каждого типа см. Встроенные типы.
Диапазон перечисляемых типов зависит от языкового контекста и указанных флагов компилятора. Для получения дополнительной информации см. Объявления и перечисления перечислений C.
См. Также
Ключевые слова
Встроенные типы
Тип данных определяет тип данных, которые может хранить переменная, например, целые, плавающие, символьные и т. Д. В языке C есть следующие типы данных.
Основные типы данныхОсновные типы данных основаны на целых числах и с плавающей запятой. Язык C поддерживает как подписанные, так и беззнаковые литералы. Размер памяти для основных типов данных может изменяться в зависимости от 32- или 64-разрядной операционной системы. Давайте посмотрим на основные типы данных. Его размер равен согласно 32-битной архитектуре .
Целочисленные типы CРезюме : в этом руководстве вы изучите различные целые типы C , включая целые числа со знаком и без знака. C целочисленных типов со знакомC предоставляет вам пять целочисленных типов со знаком. У каждого целочисленного типа есть несколько синонимов. В следующей таблице показаны первые пять целочисленных типов с соответствующими синонимами:
Целочисленные типы C без знакаДля каждого целого числа со знаком C также предоставляет соответствующий целочисленный тип без знака, который имеет тот же размер памяти, что и целочисленный тип со знаком . В следующей таблице показан тип целого числа без знака:
диапазоны значений целочисленных типов C C точно определяет минимальный размер памяти для каждого целочисленного типа e.g.,
В следующей таблице приведены общие размеры целочисленных типов в C:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
