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 |
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 используется для указания, что функция не возвращает ничего в качестве результата, или не принимает на вход никаких параметров. Этот тип не применяется для объявления переменных, соответственно он не занимает места в памяти.
какие существуют int, float, char, double, wchar_t, bool и void, как определить, таблица
В этом руководстве мы узнаем об основных типах данных, таких как int, float, char и т.д. в программировании на C++, с помощью примеров.
Что такое типы данных в C++?
Типа данных в C++ – это объявления переменных. Они определяют тип и размер данных, связанных с переменными. Например:
int age = 13;
Здесь age – переменная типа int, это означает, что переменная может хранить только целые числа размером 2 или 4 байта.
Основные типы данных
В таблице ниже показаны основные типы данных в C++, их значение и размеры (в байтах):
Тип данных | Значение | Размер (в байтах) |
---|---|---|
int | Целое число | 2 или 4 |
float | Плавающая точка | 4 |
double | Двойная плавающая точка | 8 |
char | символ | 1 |
wchar_t | Широкий характер | 2 |
bool | Булево | 1 |
void | Пустой |
Теперь давайте обсудим эти фундаментальные типы данных более подробно.
123. char
- Ключевое слово char используется для символов.
- Его размер составляет 1 байт.
- В C++ символы заключаются в одинарные кавычки ”.
- Например:
char test = 'h';
Примечание. В С++ целочисленное значение хранится в переменной типа char, а не в самом символе.
4. wchar_t
- Широкий символ wchar_t похож на тип данных char, за исключением того, что его размер составляет 2 байта вместо 1.
- Он используется для представления символов, для использования которых требуется больше памяти, чем для одного символа.
- Например:
wchar_t test = L'ם' // storing Hebrew character;
Обратите внимание на букву L перед кавычками.
Примечание. В C++ 11 также представлены два других типа символов фиксированного размера – char16_t и char32_t.
5. bool
- Тип данных bool имеет одно из двух возможных значений: true или false.
- Логические значения используются в условных операторах и циклах.
- Например:
bool cond = false;
6. void
- Ключевое слово void указывает на отсутствие данных. Это означает «ничего» или «не имеет значения».
- Мы будем использовать void, когда узнаем о функциях и указателях.
Примечание. Мы не можем объявлять переменные типа void.
Модификаторы типа
Мы можем дополнительно изменить некоторые из основных типов данных с помощью модификаторов типов. В C++ есть 4 модификатора типа:
- signed;
- unsigned;
- short;
- long.
Мы можем изменить следующие типы данных с помощью вышеуказанных модификаторов:
- int;
- double;
- char.
Список измененных типов данных
Тип данных | Размер (в байтах) | Значение |
---|---|---|
signed int | 4 | используется для целых чисел (эквивалентно int) |
unsigned int | 4 | может хранить только положительные целые числа |
short | 2 | используется для небольших целых чисел (от -32768 до 32767) |
long | не менее 4 | используется для больших целых чисел (эквивалент long int) |
unsigned long | 4 | используется для больших положительных целых чисел или 0 (эквивалент unsigned long int) |
long long | 8 | используется для очень больших целых чисел (эквивалент long long int) |
unsigned long long | 8 | используется для очень больших положительных целых чисел или 0 (эквивалент unsigned long long int) |
long double | 12 | используется для больших чисел с плавающей запятой |
signed char | 1 | используется для символов (гарантированный диапазон от -127 до 127) |
unsigned char | 1 | используется для символов (от 0 до 255) |
Посмотрим на несколько примеров.
long b = 4523232; long int c = 2345342; long double d = 233434.56343; short d = 3434233; // Error! out of range unsigned int a = -5; // Error! can only store positive numbers or 0
Производные типы данных
Типы данных, производные от основных типов данных, являются производными типами. Например: массивы, указатели, типы функций, структуры и т.д.
Типы данных Java
❮ Предыдущий Далее ❯
Типы данных Java
Как объяснялось в предыдущей главе, переменная в Java должна иметь указанный тип данных:
Пример
int myNum = 5; // Целое число (целое число) поплавок myFloatNum = 5,99f; // число с плавающей запятой символ myLetter = 'D'; // Персонаж логический myBool = истина; // логическое значение Строка myText = "Привет"; // Нить
Попробуй сам »
Типы данных делятся на две группы:
- Примитивные типы данных — включает
byte
,short
,int
,long
,float
,double
,boolean
иchar
- Непримитивные типы данных, такие как
String
, Массивы и классы (вы узнаете о них больше в следующей главе)
Примитивные типы данных
Примитивный тип данных определяет размер и тип значений переменных и не имеет дополнительные методы.
В Java существует восемь примитивных типов данных:
Тип данных | Размер | Описание |
---|---|---|
байт | 1 байт | Сохраняет целые числа от -128 до 127 |
короткий | 2 байта | Сохраняет целые числа от -32 768 до 32 767 |
ряд | 4 байта | Сохраняет целые числа от -2 147 483 648 до 2 147 483 647 |
длинный | 8 байт | Сохраняет целые числа от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
поплавок | 4 байта | Сохраняет дробные числа. Достаточно для хранение от 6 до 7 десятичных цифр |
двойной | 8 байт | Сохраняет дробные числа. Достаточно для хранение 15 десятичных цифр |
логическое значение | 1 бит | Сохраняет истинные или ложные значения |
символ | 2 байта | Сохраняет один символ/букву или значения ASCII |
Проверьте себя с помощью упражнений
Упражнение:
Добавьте правильный тип данных для следующих переменных:
моеЧисло = 9; myFloatNum = 8,99f; мояПисьмо = 'А'; myBool = ложь; myText = "Привет, мир";
Начать упражнение
❮ Предыдущий Следующий ❯
ВЫБОР ЦВЕТА
Лучшие учебники
Учебное пособие по HTMLУчебное пособие по CSS
Учебное пособие по JavaScript
Учебное пособие
Учебное пособие по SQL
Учебное пособие по Python
Учебное пособие по W3. CSS
Учебное пособие по Bootstrap
Учебное пособие по PHP
Учебное пособие по Java
Учебное пособие по C++
Учебное пособие по jQuery
Справочные материалы
Top Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery
Основные примеры
Примеры HTML
Примеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery
FORUM |
О W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения.
Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания. Используя W3Schools, вы соглашаетесь прочитать и принять наши условия использования,
куки-файлы и политика конфиденциальности.
Copyright 1999-2022 Refsnes Data. Все права защищены.
W3Schools работает на основе W3.CSS.
Каковы критерии выбора между типами данных short / int / long?, C++ FAQ
Другие сопутствующие вопросы: если короткое целое имеет тот же размер, что и
int в моей конкретной реализации, зачем выбирать тот или иной? Если
Я начинаю учитывать фактический размер переменных в байтах, не так ли?
сделать мой код непереносимым (поскольку размер в байтах может отличаться от
реализация за реализацией)? Или я должен просто пойти с размерами много
больше, чем мне на самом деле нужно, как своего рода буфер безопасности?
Ответ: Обычно рекомендуется писать код, который можно портировать на
другая операционная система и/или компилятор. Ведь если ты успешен
в том, что вы делаете, кто-то другой может захотеть использовать его где-то еще. Это может быть
немного сложнее со встроенными типами, такими как int и short, так как
С++ не дает гарантированных размеров. Однако C++ дает вам две вещи, которые
может помочь: гарантировано минимальные размеры , и это, как правило, все, что вам нужно
нужно знать, и стандартный заголовок C, который предоставляет typedefs для размерных
целые числа.
C++ гарантирует, что char состоит ровно из одного байта
который составляет не менее 8 бит, short — не менее 16 бит, int — в
не менее 16 бит, а long не менее 32 бит. Это также гарантирует
неподписанная версия каждого из них имеет тот же размер, что и оригинал,
например, sizeof(unsigned short) == sizeof(short).
При написании переносимого кода не следует делать дополнительных предположений о
эти размеры. Например, не предполагайте, что int имеет 32 бита. Если у вас есть
целочисленная переменная, которая требует не менее 32 бит, используйте длинное или
unsigned long, даже если sizeof(int) == 4 на вашем конкретном
реализация. С другой стороны, если у вас есть целая переменная величина
который всегда будет соответствовать 16 битам и , если вы хотите свести к минимуму
использование памяти данных, используйте короткое или беззнаковое короткое замыкание, даже если вы
узнайте sizeof(int) == 2 в вашей конкретной реализации.
Другим вариантом является использование следующего стандартного заголовка C (который может или может
не предоставляется вашим поставщиком компилятора C++):
#include /* не является частью стандарта C++ */
Этот заголовок определяет определения типов для таких вещей, как
int32_t и
uint16_t , которые представляют собой 32-разрядное целое число со знаком и 16-разрядное число без знака.
целое число соответственно. Там же есть и другие вкусности. Мой
рекомендуется использовать эти целочисленные типы «размера» только там, где они
на самом деле нужны. Некоторые люди поклоняются последовательности, и они очень
искушение использовать эти целые числа везде просто потому что они
нужны были где-то . Консистенция хорошая, но не та
величайшее благо, и использование этих typedef везде может вызвать некоторые головные боли
и даже возможные проблемы с производительностью. Лучше руководствоваться здравым смыслом, который часто
приводит к использованию обычных ключевых слов, например,
int,
unsigned,
и т. д., где вы можете, и использовать целые типы с явным размером, например,
int32_t и т. д. где нужно.
Обратите внимание, что здесь есть некоторые тонкие компромиссы. В некоторых случаях ваш компьютер
может быть в состоянии манипулировать меньшими вещами быстрее, чем большими, но в
в других случаях все с точностью до наоборот: арифметика int может быть быстрее, чем
краткая арифметика по некоторым реализациям. Другим компромиссом является пространство данных
против кодового пространства: арифметика int может генерировать меньше двоичного кода, чем
краткая арифметика по некоторым реализациям. Не упрощайте
предположения. Просто потому, что определенная переменная можно объявить как
short не обязательно означает, что должно быть , даже если вы пытаетесь
сэкономить место.
W3Schools работает на основе W3.CSS.