Remkomplekty.ru

IT Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Double в си это

Типы данных в языке Си

Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и способ реализации хранения значений и выполнения операций.

Процесс проверки и накладывания ограничений на типы используемых данных называется контролем типов или типизацией программных данных . Различают следующие виды типизации:

  • Статическая типизация — контроль типов осуществляется при компиляции.
  • Динамическая типизация — контроль типов осуществляется во время выполнения.

Язык Си поддерживает статическую типизацию, и типы всех используемых в программе данных должны быть указаны перед ее компиляцией.

Различают простые, составные и прочие типы данных.

Простые данные

Простые данные можно разделить на

  • целочисленные,
  • вещественные,
  • символьные
  • логические.

Составные (сложные) данные

  • Массив — индексированный набор элементов одного типа.
  • Строковый тип — массив, хранящий строку символов.
  • Структура — набор различных элементов (полей записи), хранимый как единое целое и предусматривающий доступ к отдельным полям структуры.

Другие типы данных

  • Указатель — хранит адрес в памяти компьютера, указывающий на какую-либо информацию, как правило — указатель на переменную.

Программа, написанная на языке Си, оперирует с данными различных типов. Все данные имеют имя и тип. Обращение к данным в программе осуществляется по их именам (идентификаторам).

Идентификатор — это последовательность, содержащая не более 32 символов, среди которых могут быть любые буквы латинского алфавита a — z, A — Z, цифры 0 — 9 и знак подчеркивания (_). Первый символ идентификатора не должен быть цифрой.

Несмотря на то, что допускается имя, имеющее до 32 символов, определяющее значение имеют только первые 8 символов. Помимо имени, все данные имеют тип. Указание типа необходимо для того, чтобы было известно, сколько места в оперативной памяти будет занимать данный объект.

Компилятор языка Си придерживается строгого соответствия прописных и строчных букв в именах идентификаторов и лексем.

Целочисленные данные

Целочисленные данные могут быть представлены в знаковой и беззнаковой форме.

Беззнаковые целые числа представляются в виде последовательности битов в диапазоне от 0 до 2 n -1, где n-количество занимаемых битов.

Знаковые целые числа представляются в диапазоне -2 n-1 …+2 n-1 -1. При этом старший бит данного отводится под знак числа (0 соответствует положительному числу, 1 – отрицательному).

Основные типы и размеры целочисленных данных:

Вещественные данные

Вещественный тип предназначен для представления действительных чисел. Вещественные числа представляются в разрядной сетке машины в нормированной форме.

Нормированная форма числа предполагает наличие одной значащей цифры (не 0) до разделения целой и дробной части. Такое представление умножается на основание системы счисления в соответствующей степени. Например, число 12345,678 в нормированной форме можно представить как

12345,678 = 1,2345678·10 4

Число 0,009876 в нормированной форме можно представить как

0,009876 = 9,876·10 -3

В двоичной системе счисления значащий разряд, стоящий перед разделителем целой и дробной части, может быть равен только 1. В случае если число нельзя представить в нормированной форме (например, число 0), значащий разряд перед разделителем целой и дробной части равен 0.

Значащие разряды числа, стоящие в нормированной форме после разделителя целой и дробной части, называются мантиссой числа .

В общем случае вещественное число в разрядной сетке вычислительной машины можно представить в виде 4 полей.

  • знак — бит, определяющий знак вещественного числа (0 для положительных чисел, 1 — для отрицательных).
  • степень — определяет степень 2, на которую требуется умножить число в нормированной форме. Поскольку степень 2 для числа в нормированной форме может быть как положительной, так и отрицательной, нулевой степени 2 в представлении вещественного числа соответствует величина сдвига, которая определяется как

2 n -1,

где n — количество разрядов, отводимых для представления степени числа.

  • целое — бит, который для нормированных чисел всегда равен 1, поэтому в некоторых представлениях типов этот бит опущен и принимается равным 1.
  • мантисса — значащие разряды представления числа, стоящие после разделителя целой и дробной части в нормированной форме.
  • Различают три основных типа представления вещественных чисел в языке Си:

    ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ

    Типы данных. Программа на процедурных языках, к которым относится Си, представляет собой описание операций над величинами различных типов. Тип определяет множество значений, которые может принимать величина, и множество операций, в которых она может участвовать.

    В языке Си типы связаны с именами (идентификаторами) величин, т. е. с переменными. С переменной в языке Си связывается ячейка памяти. Тип переменной задает размер ячейки, способ кодирования ее содержимого, допустимые преобразования над значением данной переменной. Все переменные должны быть описаны до их использования. Каждая переменная должна быть описана только один раз.

    Описание состоит из спецификатора типа и следующего за ним списка переменных. Переменные в списке разделяются запятыми. В конце описания ставится точка с запятой.

    char a,b; /* Переменные а и b имеют тип

    char */ intх; /* Переменная х — типа int

    */ char sym; /» Описаны переменные sym типа char;

    */ int count.num; /* num и count типа int */

    Переменным могут быть присвоены начальные значения внутри их описаний. Если за именем переменной следует знак равенства и константа, то эта константа служит в качестве инициализатора.

    Примеры: char backch = ‘’;

    Рассмотрим основные типы в языке Си.

    int — целый («integer»). Значения этого типа — целые числа из некоторого ограниченного диапазона (обычно от- 32768 до 32767). Диапазон определяется размером ячейки для типа и зависит от конкретного компьютера. Кроме того, имеются служебные слова, которые можно использовать с типом int: short int («short integer» — «короткое целое»), unsigned int («unsigned integer» — «целое без знака»), long int («длинное целое»), которые сокращают или, наоборот, расширяют диапазон представления чисел.

    char— символьный («character»). Допустимое значение для этоготипа — одинсимвол (не путать с текстом!). Символ записывается в апострофах.

    В памяти компьютера символ занимает один байт. Фактически хранится не символ, а число — код символа (от 0 до 255). В специальных таблицах кодировки указываются все допустимые символы и соответствующие им коды.

    В языке Си разрешается использовать тип char как числовой, т. е. производить операции с кодом символа, применяя при этом спецификатор целого типа в скобках — (int).

    float — вещественный (с плавающей точкой). Значения этого типа — числа, но, в отличии от char и int, не обязательно целые.

    12.87 -316.12 -3.345е5 12.345e-15

    double — вещественные числа двойной точности. Этот тип аналогичен типу float, но имеет значительно больший диапазон значений (например, для системы программирования Borland-C от 1.7Е-308 до 1.7Е+308 вместо диапазона от 3.4Е-38 до 3.4Е+38 для типа float). Однако увеличение диапазона и точности представления чисел ведет к снижению скорости выполнения программ и неэкономному использованию оперативной памяти компьютера.

    Обратите внимание на отсутствие в этом списке строкового типа. В языке Си нет специального типа, который можно было бы использовать для описания строк. Вместо этого строки представляются в виде массива элементов типа char. Это означает, что символы в строке будут располагаться в соседних ячейках памяти.

    Необходимо отметить, что последним элементом массива является символ . Это «нуль-символ», и в языке Си он используется для того, чтобы отмечать конец строки. Нуль-символ не цифра 0; он не выводится на печать и в таблице кодов ASCII имеет номер 0. Наличие нуль-символа означает, что количество ячеек массива должно быть. по крайней мере, на одну больше,чем число символов, которые необходимо размещать в памяти.

    Приведем пример использования строк.

    В этом примере описан массив из 31 ячейки памяти, в 30 из которых можно поместить один элемент типа char. Он вводится при вызове функции scanf(«%s»,string); «&»отсутствует при указании массива символов.

    Указатели. Указатель — некоторое символическое представление адресаячейкипамяти, отведенной для переменной.

    Здесь & — операция получения адреса. Фактический адрес — это число, а символическое представление адреса &name является константой типа «указатель».

    В языке Си имеются и переменные типа указатель. Точно так же, как значением переменной типа char является символ, а значением переменной типа int — целое число, значением переменной типа указатель служит адрес некоторой величины.

    Если мы дадим указателю имя ptr, то сможем написать такой оператор:

    ptr = &name;/* присваивает адрес name переменной ptr */

    Мы говорим в этом случае, что prt «указатель на» name. Различие между двумя формами записи: ptr и &name — в том, что prt — это переменная, в то время как &name — константа. В случае необходимости можно сделать так, чтобы переменная ptr указывала на какой-нибудь другой объект:

    ptr = &bah; /* ptr указывает на bah, а не на name */

    Теперь значением переменной prt является адрес переменной bah. Предположим, мы знаем, что в переменной ptr содержится ссылка на переменную bah. Тогда для доступа к значению этой переменной можно воспользоваться операцией «косвенной адресации» * :

    val = *ptr; /* определение значения, на которое указывает ptr */ Последние два оператора, взятые вместе, эквивалентны следующему:

    Итак, когда за знаком & следует имя переменной, результатом операции является адрес указанной переменной; &nurse дает адрес переменной nurse; когда за знаком * следует указатель на переменную, результатом операции является величина, помещенная в ячейку памяти с указанным адресом.

    ptr = &nuse; /* указатель на nurse */

    Результат- присваивание значения 22 переменной val.

    Недостаточно сказать, что некоторая переменная является указателем. Кроме этого необходимо сообщить, на переменную какого типа ссылается данный указатель. Причина заключается в том, что переменные разных типов занимают различное число ячеек памяти, в то время как для некоторых операций, связанных с указателями, требуется знать объем отведенной памяти.

    Примеры правильного описания указателей: int *pi; char *pc;

    Спецификация типа задает тип переменной, на которую ссылается указатель, а символ * определяет саму переменную как указатель. Описание вида int *pi; говорит, что pi — это указатель и что *pi — величина типа int.

    В языке Си предусмотрена возможность определения имен типов данных. Любому типу данных с помощью определения typedef можно присвоить имя и использовать это имя в дальнейшем при описании объектов.

    Формат: typedef Пример: typedef long LARGE; /* определяется тип large, эквивалентный типу long */

    Имена производного типа рекомендуется записывать прописными буквами, чтобы они выделялись в тексте программы.

    Определение typedef не вводит каких-либо новых типов, а только добавляет новое имя для уже существующего типа. Описанные таким способом переменные обладают точно теми же свойствами, что и переменные, описанные явно. Переименование типов используется для введения осмысленных или сокращенных имен типов, что повышает понятность программ, и для улучшения переносимости программ (имена одного типа данных могут различаться на разных компьютерах).

    Операции. Язык Си отличается большим разнообразием операций (более 40). Здесь мы рассмотрим лишь основные из них, табл. 3.3.

    Арифметические операции. К ним относят

    • остаток от деления нацело (%),

    В языке Си принято правило: если делимое и делитель имеют тип int, то деление производится нацело, т е. дробная часть результата отбрасывается.

    Как обычно, в выражениях операции умножения, деления и нахождения остатка выполняются раньше сложения и вычитания. Для изменения порядка действий используют скобки.

    5 = -3 + 4 * 5 — 6; printf(«%dn»,s);

    s = -3 + 4%5 — 6; printf(«%dn»,s);

    s = -3 * 4% — 6/5; printf(«%dn»,s);

    s= (7 + 6)%5/2; printf(«%dn»,s);

    Результат выполнения программы: 11 1 0 1

    Таблица 3.3 Старшинство и порядок выполнения операций

    Переменные

    Переменные

    П еременные используются для хранения значений (sic!). Переменная характеризуется типом и именем. Начнём с имени. В си переменная может начинаться с подчерка или буквы, но не с числа. Переменная может включать в себя символы английского алфавита, цифры и знак подчёркивания. Переменная не должна совпадать с ключевыми словами (это специальные слова, которые используются в качестве управляющих конструкций, для определения типов и т.п.)

    Например, правильные идентификаторы
    a, _, _1_, Sarkasm, a_long_variable, aLongVariable, var19, defaultX, char_type
    неверные
    1a, $value, a-long-value, short

    Си — регистрозависимый язык. Переменные с именами a и A, или end и END, или perfectDark и PerfectDarK – это различные переменные.

    Типы переменных

    Т ип переменной определяет

    • 1) Размер переменной в байтах (сколько байт памяти выделит компьютер для хранения значения)
    • 2) Представление переменной в памяти (как в двоичном виде будут расположены биты в выделенной области памяти).

    В си несколько основных типов. Разделим их на две группы — целые и числа с плавающей точкой.

    Целые

    • char — размер 1 байт. Всегда! Это нужно запомнить.
    • short — размер 2 байта
    • int — размер 4 байта
    • long — размер 4 байта
    • long long — размер 8 байт.

    Здесь следует сделать замечание. Размер переменных в си не определён явно, как размер в байтах. В стандарте только указано, что

    Указанные выше значения характерны для компилятора VC2012 на 32-разрядной машине. Так что, если ваша программа зависит от размера переменной, не поленитесь узнать её размер.

    Теперь давайте определим максимальное и минимальное число, которое может хранить переменная каждого из типов. Числа могут быть как положительными, так и отрицательными. Отрицательные числа используют один бит для хранения знака. Иногда знак необходим (например, храним счёт в банке, температуру, координату и т.д.), а иногда в нём нет необходимости (вес, размер массива, возраст человека и т.д.). Для этого в си используется модификатор типа signed и unsigned. unsigned char — все 8 бит под число, итого имеем набор чисел от 00000000 до 11111111 в двоичном виде, то есть от 0 до 255 signed char от -128 до 128. В си переменные по умолчанию со знаком. Поэтому запись char и signed char эквивалентны.

    sizeof

    В си есть оператор, который позволяет получить размер переменной в байтах. sizeof переменная, или sizeof(переменная) или sizeof(тип). Это именно оператор, потому что функция не имеет возможности получить информацию о размере типов во время выполнения приложения. Напишем небольшую программу чтобы удостовериться в размерах переменных.

    (Я думаю ясно, что переменные могут иметь любое валидное имя). Эту программу можно было написать и проще

    В си один и тот же тип может иметь несколько названий
    short === short int
    long === long int
    long long === long long int
    unsigned int === unsigned

    Типы с плавающей точкой

    • float — 4 байта,
    • long float — 8 байт
    • double — 8 байт
    • long double — 8 байт.

    Здесь также приведены значения для VC2012, по стандарту размер типов float Таб. 2 Размер типов с плавающей точкой в си.

    Переполнение переменных

    Си не следит за переполнением переменных. Это значит, что постоянно увеличивая значение, скажем, переменной типа int в конце концов мы «сбросим значение»

    Вообще, поведение при переполнении переменной определено только для типа unsigned: Беззнаковое целое сбросит значение. Для остальных типов может произойти что угодно, и если вам необходимо следить за переполнением, делайте это вручную, проверяя аргументы, либо используйте иные способы, зависящие от компилятора и архитектуры процессора.

    Постфиксное обозначение типа

    П ри работе с числами можно с помощью литер в конце числа явно указывать его тип, например

    • 11 — число типа int
    • 10u — unsigned
    • 22l или 22L — long
    • 3890ll или 3890LL — long long (а также lL или Ll)
    • 80.0f или 80.f или 80.0F — float (обязательно наличие десятичной точки в записи)
    • 3.0 — число типа double

    Экспоненциальная форма записи также по умолчанию обозначает число типа double.

    Следующий код, однако, не будет приводить к ошибкам, потому что происходит неявное преобразование типа

    Шестнадцатеричный и восьмеричный формат

    В о время работы с числами можно использовать шестнадцатеричный и восьмеричный формат представления. Числа в шестнадцатиричной системе счисления начинаются с 0x, в восьмеричной системе с нуля. Соответственно, если число начинается с нуля, то в нём не должно быть цифр выше 7:

    Экспоненциальная форма представления чисел

    Э кспоненциальной формой представления числа называют представление числа в виде M e ± p , где M — мантиса числа, p — степень десяти. При этом у мантисы должен быть один ненулевой знак перед десятичной запятой.
    Например 1.25 === 1.25e0, 123.5 === 1.235e2, 0.0002341 === 2.341e-4 и т.д.
    Представления 3.2435e7 эквивалентно 3.2435e+7
    Существеут и другое представление («инженерное»), в котором степень должна быть кратной тройке. Например 1.25 === 1.25e0, 123.5 === 123.5e0, 0.0002341 === 234.1e-6, 0.25873256 === 258.73256e-3 и т.д.

    Объявление переменных

    В си переменные объявляются всегда в начале блока (блок — участок кода ,ограниченный фигурными скобками)

    При объявлении переменной пишется её тип и имя.

    Можно объявить несколько переменных одного типа, разделив имена запятой

    Здесь объявлены переменные a и b внутри функции main, и переменная z внутри тела цикла. Следующий код вызовет ошибку компиляции

    Это связано с тем, что объявление переменной стоит после оператора присваивания. При объявлении переменных можно их сразу инициализировать.
    int i = 0;
    При этом инициализация при объявлении переменной не считается за отдельный оператор, поэтому следующий код будет работать

    Начальное значение переменной

    О чень важно запомнить, что переменные в си не инициализируются по умолчанию нулями, как во многих других языках программирования. После объявления переменной в ней хранится «мусор» — случайное значение, которое осталось в той области памяти, которая была выделена под переменную. Это связано, в первую очередь, с оптимизацией работы программы: если нет необходимости в инициализации, то незачем тратить ресурсы для записи нулей (замечание: глобальные переменные инициализируются нулями, почему так, читайте в этой статье).

    Если выполнять эту программу на VC, то во время выполнения вылетит предупреждение
    Run-Time Check Failure #3 — The variable ‘i’ is being used without being initialized.
    Если нажать «Продолжить», то программа выведет «мусор». В многих других компиляторах при выполнении программы не будет предупреждения.

    Область видимости переменной

    П еременные бывают локальными (объявленными внутри какой-нибудь функции) и глобальными. Глобальная переменная видна всем функциям, объявленным в данном файле. Локальная переменная ограничена своей областью видимости. Когда я говорю, что переменная «видна в каком-то месте», это означает, что в этом месте она определена и её можно использовать. Например, рассмотрим программу, в которой есть глобальная переменная

    Будет выведено
    foo: 100
    bar: 333
    Здесь глобальная переменная global видна всем функциям. Но аргумент функции затирает глобальную переменную, поэтому при передаче аргумента 333 выводится локальное значение 333.
    Вот другой пример

    Программа выведет 555. Также, как и в прошлом случае, локальная переменная «важнее». Переменная, объявленная в некоторой области видимости не видна вне её, например

    Этот пример не скомпилируется, потому что переменная y существует только внутри своего блока.
    Вот ещё пример, когда переменные, объявленные внутри блока перекрывают друг друга

    Программа выведет
    30
    20
    10
    Глобальных переменных необходимо избегать. Очень часто можно услышать такое. Давайте попытаемся разобраться, почему. В ваших простых проектах глобальные переменные выглядят вполне нормально. Но представьте, что у вас приложение, которое

    • 1) Разрабатывается несколькими людьми и состоит из сотен тысяч строк кода
    • 2) Работает в несколько потоков

    Во-первых, глобальная переменная, если она видна всем, может быть изменена любой частью программы. Вы изменили глобальную переменную, хотите её записать, а другая часть программы уже перезаписала в неё другое значение (на самом деле это целый класс проблем, которые возникают в многопоточной среде). Во-вторых, при больших размерах проекта не уследить, кто и когда насоздавал глобальных переменных. В приведённых выше примерах видно, как переменные могут перекрывать друг друга, то же произойдёт и в крупном проекте.

    Безусловно, есть ситуации, когда глобальные переменные упрощают программу, но такие ситуации случаются не часто и не в ваших домашних заданиях, так что НЕ СОЗДАВАЙТЕ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ!
    Переменные могут быть не только целочисленными и с плавающей точкой. Существует множество других типов, которые мы будем изучать в дальнейшем.

    ITandLife.ru

    Статьи об IT, программировании, политике, экономике, жизни и изучении научных дисциплин

    Типы данных C++

    В этой записи-шпаргалке приведены сведения об основных типах данных языка программирования C++ и особенности их реализации. Также, в конце записи составлена таблица с диапазонами значений этих типов.

    Концепция типа данных

    Основная цель любой программы состоит в обработке данных. Данные различного типа хранятся и обрабатываются по-разному. В любом алгоритмическом языке каждая константа, переменная, результат вычисления выражения или функции должны иметь определенный тип.

    Тип данных определяет:

    • внутреннее представление данных в памяти компьютера;
    • множество значений, которые могут принимать величины этого типа;
    • операции и функции, которые можно применять к величинам этого тина.

    Исходя из этих характеристик, программист выбирает тип каждой величины, используемой в программе для представления реальных объектов. Обязательное описание типа позволяет компилятору производить проверку допустимости различных конструкций программы. От типа величины зависят машинные команды, которые будут использоваться для обработки данных.

    Все типы языка C++ можно разделить на основные и составные. В языке C++ определено шесть основных типов данных для представления целых, вещественных, символьных и логических величин. На основе этих типов программист может вводить описание составных типов. К ним относятся массивы, перечисления, функции, структуры, ссылки, указатели, объединения и классы.

    Основные типы данных в C++

    Основные (стандартные) типы данных часто называют арифметическими, поскольку их можно использовать в арифметических операциях. Для описания основных типов определены следующие ключевые слова:

    1. int (целый);
    2. char (символьный);
    3. wchar_t (расширенный символьный);
    4. bool (логический);
    5. float (вещественный);
    6. double (вещественный с двойной точностью).

    Первые четыре тина называют целочисленными (целыми), последние два — типами с плавающей точкой. Код, который формирует компилятор для обработки целых величин, отличается от кода для величин с плавающей точкой.

    Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:

    • short (короткий);
    • long (длинный);
    • signed (знаковый);
    • unsigned (беззнаковый).

    Целый тип (int)

    Размер типа int не определяется стандартом, а зависит от компьютера и компилятора. Для 16-разрядного процессора под величины этого типа отводится 2 байта, для 32-разрядного — 4 байта.

    Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта независимо от разрядности процессора. Спецификатор long означает, что целая величина будет занимать 4 байта. Таким образом, на 16-разрядном компьютере эквиваленты int и short int, а на 32-разрядном — int и long int.

    Внутреннее представление величины целого типа — целое число в двоичном коде. При использовании спецификатора signed старший бит числа интерпретируется как знаковый (0 — положительное число, 1 — отрицательное). Спецификатор unsigned позволяет представлять только положительные числа, поскольку старший разряд рассматривается как часть кода числа. Таким образом, диапазон значений типа int зависит от спецификаторов. Диапазоны значений величин целого типа с различными спецификаторами для IBM PC-совместимых компьютеров приведены в таблице «Диапазоны значений простых типов данных» в конце записи.

    По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно опускать.

    Константам, встречающимся в программе, приписывается тот или иной тип в соответствии с их видом. Если этот тип по каким-либо причинам не устраивает программиста, он может явно указать требуемый тип с помощью суффиксов L, l (long) и U, u (unsigned). Например, константа 32L будет иметь тип long и занимать 4 байта. Можно использовать суффиксы L и U одновременно, например, 0x22UL или 05Lu.

    Символьный тип (char)

    Под величину символьного типа отводится количество байт, достаточное для размещения любого символа из набора символов для данного компьютера, что и обусловило название типа. Как правило, это 1 байт. Тип char, как и другие целые типы, может быть со знаком или без знака. В величинах со знаком можно хранить значения в диапазоне от -128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от О до 255. Этого достаточно для хранения любого символа из 256-символьного набора ASCII. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.

    Расширенный символьный тип (wchar_t)

    Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типу short. Строковые константы типа wchar_t записываются с префиксом L, например, L»Gates».

    Логический тип (bool)

    Величины логического типа могут принимать только значения true и false, являющиеся зарезервированными словами. Внутренняя форма представления значения false — 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.

    Типы с плавающей точкой (float, double и long double)

    Стандарт C++ определяет три типа данных для хранения вещественных значений: float, double и long double.

    Типы данных с плавающей точкой хранятся в памяти компьютера иначе, чем целочисленные. Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка. В IBM PC-совместимых компьютерах величины типа float занимают 4 байта, из которых один двоичный разряд отводится под знак мантиссы, 8 разрядов под порядок и 23 под мантиссу. Мантисса — это число, большее 1.0, но меньшее 2.0. Поскольку старшая цифра мантиссы всегда равна 1, она не хранится.

    Для величин типа double, занимающих 8 байт, под порядок и мантиссу отводится 11 и 52 разряда соответственно. Длина мантиссы определяет точность числа, а длина порядка — его диапазон. Как можно видеть из таблицы в конце записи, при одинаковом количестве байт, отводимом под величины типа float и long int, диапазоны их допустимых значений сильно различаются из-за внутренней формы представления.

    Спецификатор long перед именем типа double указывает, что под его величину отводится 10 байт.

    Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, l (long). Например, константа 2E+6L будет иметь тип long double, а константа 1.82f — тип float.

    Для написания переносимых на различные платформы программ нельзя делать предположений о размере типа int. Для его получения необходимо пользоваться операцией sizeof, результатом которой является размер типа в байтах. Например, для операционной системы MS-DOS sizeof (int) даст в результате 2, а для Windows 98 или OS/2 результатом будет 4.

    В стандарте ANSI диапазоны значений для основных типов не задаются, определяются только соотношения между их размерами, например:

    sizeof(float) ≤ slzeof(double) ≤ sizeof(long double)
    sizeof(char) ≤ slzeof(short) ≤ sizeof(int) ≤ sizeof(long)

    Тип void

    Кроме перечисленных, к основным типам языка относится тип void, но множество значений этого типа пусто. Он используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, как базовый тип для указателей и в операции приведения типов.

    Диапазоны значений простых типов данных в C++ для IBM PC-совместимых компьютеров

    Q: Что означает термин IBM PC-совместимый компьютер?
    A: IBM PC-совместимый компьютер (англ. IBM PC compatible) — компьютер, архитектурно близкий к IBM PC, XT и AT. IBM PC-совместимые компьютеры построены на базе микропроцессоров, совместимых с Intel 8086 (а, как известно, все выпущенные позднее процессоры Intel имеют полную обратную совместимость с 8086). По сути это практически все современные компьютеры.

    Различные виды целых и вещественных типов, различающиеся диапазоном и точностью представления данных, введены для того, чтобы дать программисту возможность наиболее эффективно использовать возможности конкретной аппаратуры, поскольку от выбора типа зависит скорость вычислений и объем памяти. Но оптимизированная для компьютеров какого-либо одного типа программа может стать не переносимой на другие платформы, поэтому в общем случае следует избегать зависимостей от конкретных характеристик типов данных.

    Переменные в C++ — урок 3

    Всем привет! В данной статье я бы хотел рассказать о важнейшем компоненте в программировании — переменных. Без них очень трудно представить полноценную программу, ведь они позволяют взаимодействовать с пользователем, а также упрощают многие рутинные действие. Именно поэтому мы приступаем к изучению переменных!

    Видео урок

    Что такое переменные?

    Переменные — это выделенные ячейки в памяти под определенный тип данных. Сами же ячейки постоянно хранятся на компьютере пользователя. Их мы можем заполнять различными значениями, модифицировать и использовать в наших целях.

    Стандартные типы данных в C++

    Прежде чем мы продолжим знакомство с переменными в C++, давайте узнаем, значениями какого типа мы можем заполнять созданные нами переменные.

    Вот список стандартных типов данных:

    • int — это целый тип, который может хранить в себе только целые числа.
    • float — данный тип является неточным. Он позволяет хранить не только целую часть, но, в отличии от типа int, и дробную.
    • double — данный тип нечем не отличается от float , кроме более высокой точности (позволяет хранить больше чисел после запятой).
    • char — в данный тип данных можно записывать отдельные символы (абсолютно любые).
    • bool — хранит в себе значения логического типа: «правду» — true, либо «ложь» — false. О данном типе мы подробно поговорим в уроке о логических выражениях.

    Теперь когда мы вооружились знаниями о возможных типах данных, можем переходить непосредственно к созданию переменных на языке C++!

    Создание переменных

    Чтобы объявить переменную нам необходимо воспользоваться следующей конструкцией:

    Полный список типов данных вы можете увидеть выше. Имена же переменных задаются следующим образом:

    • Имя переменной не может начинаться с цифры.
    • В имени переменной не может быть пробелов, а также специальных символов (вроде ; № # % или /).
    • Имя переменной не может совпадать с другими, ранее объявленными, именами (функций, переменных, стандартных операторов и т. п.).

    Поэтому, когда вы будете создавать очередную переменную, проверьте соблюдение всех выше перечисленных правил.

    Теперь давайте разберем пример создания различных переменных:

    Также мы можем не задавать значение при создании переменной. Для этого мы просто прописываем тип и имя переменной:

    Теперь давайте более подробно разберем значения передаваемые вышеперечисленным типам:

    • Для указания переменной целого типа нам надо просто написать нужное число.
    • Для указания дробного значения мы должны в начале написать целую часть числа, затем указать точку, а после нее дробную часть числа.
    • Если мы хотим передать символ, мы должна обернуть требуемый символ в одинарные кавычки.
    • Для записи значения «верно», в переменную типа bool , мы должны написать true , и false для значения «ложь».

    Вот мы и разобрали создание переменных на C++. Теперь давайте попробуем создать простую программу с использованием переменных!

    Создаем программу с использованием переменных

    Для демонстрации возможностей переменных, давайте напишем простой калькулятор, который будет считывать два числа с консоли, а затем выводить их произведение.

    Для ввода переменных мы будем использовать стандартный оператор ввода — cin . Данный оператор относится к библиотеке iostream . Мы с ней уже встречались раньше, при использование оператора вывода cout .

    Давайте приступим к написанию нашей программы:

    Читать еще:  Язык си do while
    Ссылка на основную публикацию
    Adblock
    detector