46019 (Turbo C++ Programer`s guide), страница 4
Описание файла
Документ из архива "Turbo C++ Programer`s guide", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "46019"
Текст 4 страницы из документа "46019"
2e-5 2.0 x 10
10
3E+10 3.0 x 10
34
.09E34 0.09 x 10
Константы с плавающей точкой - типы данных
При отсутствии каких-либо суффиксов константы с плавающей точкой имеют тип данных double. Однако, вы можете присвоить константе с плавающей точкой тип данных float, добавив к ней суффикс f или F. Аналогичным образом, суффиксl илиL присвоит константе тип данных long double. В следующей таблице показаны диапазоны значений, которые могут принимать типы данных float, double и long double.
Размеры и диапазоны
констант с плавающей точкой Turbo C++ Таблица 1.8
Тип Размер (в битах) Диапазон значений
-38 38
float 32 3.4 x 10 до 3.4 x 10
-308 308
double 64 1.7 x 10 до 1.7 x 10
-4932 4932
long double 80 3.4 x 10 до 1.1 x 10
Перечислимые константы
Перечислимые константы представляют собой идентификаторы, определенные в объявлениях типа enum.Эти идентификаторы обычно выбираются как мнемонические обозначения для удобства обращения с данными. Перечислимые константы имеютцелочисленный тип данных. Они могут быть использованы в любых выражениях, в которых допустим целочисленныйтип данных. Используемые идентификаторы должны быть уникальными в пределах контекста объявления enum.
Значения, принимаемые перечислимыми константами,зависят от формата объявления перечислимого типа и присутствия опциональных инициализаторов. В данном примере,
enum team (* giants, cubs, dodgers *);
giants, cubs и dodgers это перечислимые константы типа team, которые могут быть назначены любым переменным типа team или любой другой переменной целочисленного типа. Значения, принимаемые перечислимыми константами,
giants = 0, cubs = 1, dodgers = 2
при условии отсутствия явных инициализаторов. В следующем примере,
enum team (* giants, cubs=3, dodgers = giants + 1 *);
константы установлены следующим образом:
giants = 0, cubs = 3, dodgers = 1
Значения констант не обязаны быть уникальными:
enum team (* giants, cubs = 1, dodgers = cubs - 1 *);
Допустимы также отрицательные инициализаторы.
Строковые литералы
Строковые литералы, известные также как строковые константы, образуют специальную категорию констант, используемых для работы с фиксированными последовательностями символов. Строковый литерал имееттип данных array ofchar и класспамятиstatic, и записываетсякак последовательность произвольного количества символов, заключенных в двойные кавычки:
"Это строковый литерал!"
Нулевая (пустая) строка записывается как "".
Символы внутри двойных кавычек могут включатьуправляющие последовательности (см. стр. 13 оригинала). Например, данный код,
"\t\t\"Имя \"\\\tАдрес\n\n"
распечатается следующим образом:
"Имя "\ Адрес
Слову "Имя " будет предшествовать два символа табуляции; слову Адрес предшествуетодин символтабуляции. Строка заканчиваетсядвумя символами новой строки. Последовательность \" обеспечивает вывод внутренних кавычек.
Строка литерала хранится в памяти как заданная последовательность символов,плюс конечный пустой символ ('\0'). Нулевая строка хранится в виде одного символа '\0'.
На фазе лексического анализа соседние строковые литералы, разделенные толькопробелами, конкатенируются. В следующем примере,
#include
main()
(*
char *p;
p = "Это пример того, как Turbo C++"
" автоматически\nвыполняет для вас конкатенацию"
" очень длинных строк,\nчто позволяет получить"
" более красивые программы.";
printf(*p*);
*)
На выходе программы будет:
Это пример того, как Turbo C++ автоматически выполняет для вас конкатенацию очень длинных строк, что позволяет получить более красивые программы.
Для расширения строковой константы за границы строки в качестве символа продолжения можно использовать обратную наклонную черту (\):
put("В действительности \
это однострочная строка символов");
Константы и их внутреннее представление
ANSI C говорит о том, что размер и численный диапазон базовых типовданных( и различных их модификаций) зависят от конкретной реализации компилятора и в целом от архитектуры компьютера, на котором он установлен. Базовыми компьютерами дляTurbo C++ являются компьютеры семействаIBM PC (и совместимые с ними), поэтому выбор внутреннего представления различных типов данных в целом определяется архитектурой микропроцессоров 8088 и 80x86. В следующей таблице сведены размеры и соответствующие диапазоны значений для типов данных, определяемых в Turbo C++. Дополнительную информацию об этих типах данных см. на стр. 39 оригинала. Внутреннее представление типов данных см. на рис.1.
Типы данных, размеры и диапазоны значений Таблица 1.9
Тип Размер Диапазон Примеры применения
unsigned char8 0 до 255 Малые числа и полный
набор символов PC
char8 -128 до 127 Самые малые числа и
ASCII-символы
enum 16 -32,768 до 32,767 Упорядоченные наборы
значений
unsigned int 16 0 до 65,535 Большие числа и циклы
short int 16 -32,768 до 32,767 Счетчики, малые числа,
управление циклами
int 16 -32,768 до 32,767 Счетчики, малые числа,
управление циклами
unsigned long 32 0 до 4,294,967,295 Астрономические расстояния
long 32 -2,147,483,648 до 2,147,483,647
Большие числа, население
-38 38
float 32 3.4 x 10 до 3.4 x 10
Научные расчеты (точность
7 разрядов)
-308 308
double 64 1.7 x 10 до 1.7 x 10
Научные расчеты (точность
15 разрядов)
-4932 4932
long double 80 3.4 x 10 до 1.1 x 10
Финансовые расчеты
(точность 19 знаков)
near pointer 16 Не существует Манипулирование адресами
памяти
far pointer 32 Не существует Манипулирование адресами
памяти вне текущего
сегмента
<------- направление возрастания значимости
int \!s\!значение\! (дополнение до 2)
15 0
long int \!s\!значение \! (дополнение до 2)
31 0
----------------------
\! \!смещенный\!мантисса\!
float \!s\!порядок \! \!
31 0
--------------------------------
\! \! смещенный \! мантисса \!
double \!s\! порядок \! \!
63 0
----------------------------------------
\! \! смещенный \! \! мантисса \!
long double \!s\! порядок \! \! \!
79 0
s = знаковый бит (0 = положит, 1 = отрицат)
= позиция неявной двоичной точки
1 = целочисленный бит мантиссы: записывается в long double неявно (всегда 1) в float, double
Смещенный порядок (нормализованные значения): float:127 (7FH)
double:1023 (3FFH)
long double: 16,383 (3FFFH)
Рис.1.1 Внутренние представления типов данных
Выражения с константами
Выражение с константами это выражение, вычисление которого даетв результате константу (причем лежащую в диапазоне, определенном для констант данного типа). Вычисление выражений с константами выполняется так же, как и обычных выражений. Выражения с константами можно использовать везде, гдедопускается использование самих констант. Синтаксис выражений сконстантами следующий:
выражение-с-константами:
условное-выражение
Выражения с константами не могут содержать приводимых ниже операций, если эти операции не содержатся в операнде операции sizeof:
- присваивание
- декремент
- вызов функции
- запятая
Описание операций
Операциями называются лексемы, вызывающие некоторые вычисления спеременными ипрочими объектами, указанными в выражении. Turbo C++ имеетособенно богатый набор операций, включающий в себя помимо обычных арифметических и логических операций средства манипуляции с данными на битовом уровне, доступа к компонентам структур иобъединений, а такжеоперации с указателями (установка и обращение по ссылке).
Расширения C++ предлагают дополнительные операции для доступа к компонентам класса и их объектам, атакже механизм перегрузки операций. Перегрузка позволяет переопределять действие любых стандартных операций применительно к объектам заданного класса. В данном разделе мы ограничимся рассмотрением стандартных операций TurboC++. Перегрузка рассматривается, начиная со стр.124 оригинала.
После определения стандартных операций мы обсудим типы данных и объявления, а также объясним, как они влияют на действие каждой операции. Затем мы перейдем к рассмотрению синтаксиса построения выражений с помощью операций, пунктуаторов и объектов.
Операции в Turbo C++ определяются следующим образом:
операция: одно из
[] () . -> ++ --
& * + - тильда !
sizeof / % <> <
> = == != ^
\! && \!\! ?: = *=
/= %= += -= <>=
&= ^= \!= , # ##
Операции # и ## используются только препроцессором (см. стр. 133 оригинала).
Следующие операции являются специфичными для C++:
:: .* ->*
За исключением операций [], () и ?:, служащих для записи выражений в скобках, многосимвольные операции рассматриваются в качестве одной лексемы. Лексема одной и той же операции может иметьнесколько интерпретаций, в зависимости от контекста. Например,
A * B Умножение
*ptr Обращение по ссылке
A & B Поразрядное И
&A Операция адресации
int & Модификатор указателя (C++)
label: Метка оператора
a ? x : y Условный оператор
void func(int n); Объявление функции
a = (b+c)*d; Выражение со скобками
a, b, c; Выражение с запятой
func(a, b, c); Вызов функции
a = -b; Поразрядное вычитание (дополнение до
единицы)
-func() (*delete a;*) Деструктор (C++)
Унарные операции
& Операция адресации
* Операция обращения по ссылке
+ Унарный плюс
- Унарный минус
тильда Поразрядное дополнение (дополнение до
единицы)
! Логическое отрицание
++ Префикс: пред- инкремент;
Постфикс: пост- инкремент
-- Префикс: пред- декремент;
Постфикс: пост- декремент
Бинарные операции
Операции типа сложения + Бинарный плюс (сложение)
- Бинарный минус (вычитание)
Операции типа умножения * Умножение
/ Деление
% Остаток от деления
Операции сдвига << Сдвиг влево
>> Сдвиг вправо
Поразрядные операции & Поразрядное И
^ Поразрядное исключающее ИЛИ
\! Поразрядное включающее ИЛИ
Логические операции && Логическое И
\!\! Логическое ИЛИ
Операторы присваивания = Присваивание
*= Присвоить произведение
/= Присвоить частное
%= Присвоить остаток
+= Присвоить сумму
-= Присвоить разность
<<= Присвоить сдвиг влево
>>= Присвоить сдвиг вправо
&= Присвоить поразрядное И
^= Присвоить поразрядное исключающее
ИЛИ
\!= Присвоить поразрядное ИЛИ
Операции отношения < Меньше
> Больше
<= Меньше или равно
>= Больше или равно
Операции равенства == Равно
!= Не равно
Операции выбора . Прямой селектор компонента компонента -> Косвенный селектор компонента
Операции с компонентами :: Доступ/разрешение контекста класса .* Обращение через указатель
к компоненту класса
->* Обращение через указатель
к компоненту класса
Условные операции a ? x : y "Если a то x иначе y"
Операция запятой , Вычислить, например, a, b, c слева - направо
Функции этих операций,также как их синтаксис, приоритет и свойства ассоциативности рассматриваются, начиная со стр. 73 оригинала.
Пунктуаторы
В TurboC++ пунктуаторы, также называемые разделителями, определяются следующим образом:
пунктуатор: одно из
[ ] ( ) (* *) , ; : ... * = #
Квадратные скобки
[] (открывающая и закрывающая квадратные скобки) указывают на индексы одно- и многомерных массивов:
char ch, str[] = "Stan"
int mat[3][4]; /* матрица 3 x 4 */
ch = str[3]; /* 4-й элемент */
...
Круглые скобки
() (открывающая и закрывающая круглыескобки) группируют выражения, выделяют условные выражения и указывают на вызовы функций и параметры функций:
d = c * (a + b); /* переопределение нормального приоритета */
/* выполнения операций */
if (d == z) ++x; /* важно при использовании условных операций */
func(); /* вызов функции без аргументов */
int (*fptr)(); /* объявление указателя функции */
fptr = func; /* отсутствие () означает указатель функции */
void func2(int n); /* объявление функции с аргументами */
Рекомендуетсяиспользовать круглые скобки в макроопределениях, что позволит избежать возможных проблем с приоритетами операций во время расширения:
#define CUBE(x) ((x) * (x) * (x))
Использование круглых скобок для изменения нормальных приоритетов операцийи правил ассоциативности см. на стр.76 оригинала.
Фигурные скобки
(**) (Открывающие и закрывающие фигурныескобки) обозначают начало и конец составного оператора:
if (d == z)
(*