Реферат: Turbo C++ Programer`s guide
-----------------------------------------------------------
десятичная int,
long int, unsigned long int
восьмеричная int, unsigned int, long int, unsigned long int
шестнадцатиричная int, unsigned int, long int, unsigned long int
-----------------------------------------------------------
Если константа имеет суффикс U или u, то ее тип
данных будет первым из типов unsigned int, insigned long int, который
удовлетворит требованиям ее величины.
Если константа имеет суффикс L или l, то ее тип данных
будет первым из типов long int, unsigned long int, который удовлетворит
требованиям ее величины.
Если константа имеет оба суффикса u и l (ul, lu, Ul,
lU,uL, Lu, LU или UL), то она будет иметь тип данных unsigned long int.
В таблице 1.6 сведены представления целочисленных констант
для всех трех систем счисления. Указанные типы данных предполагают отсутствие
переопределяющих суффиксов L или U.
Целочисленные константы Turbo
C++ без L или U Таблица 1.6
Десятичные константы
0 до 32,767
int
32,768 до
2,147,483,647 long
2,147,483,648 до 4,294,967,295
unsigned long
> 4294967295 Генерируется
ошибка
Восьмеричные константы
00 до 077777
int
0100000 до
0177777 unsigned int
02000000 до
017777777777 long
020000000000 до 037777777777
unsigned long
> 037777777777 Генерируется
ошибка
Шестнадцатиричные константы
0x0000 до
0x7FFF int
0x8000 до
0xFFFF unsigned int
0x10000 до
0x7FFFFFFF long
0x80000000 до 0xFFFFFFFF unsigned
long
> 0xFFFFFFFF Генерируется
ошибка
Символьные константы
Символьная константа - этоодин или более символов,
заключенных в одинарные кавычки, например 'F', '=', '\n'. В C константы
изодногосимвола имеюттип Int и имеют внутреннее представление16 бит, в то
времякак старший байт слова заполняется нулем или знаком. В C++ константа из одного
символа имеет тип char. Многосимвольные константы как в C, так и в C ++, имеют
тип данных Int.
Управляющие последовательности
Для введения управляющих
последовательностей,позволяющих получить визуальное представление некоторых не
имеющих графическогоаналога символов, используется символ обратной наклонной
черты (\). Например, в качестве одного символа новой строки можно записать
константу \n.
Обратнаянаклонная черта используетсяс восьмеричными или
шестнадцатиричными числами для представления ASCII-символами управляющего кода,
соответствующемуэтому значению; например, '\03' вместо Ctrl-C или '\x3F' вместо
вопросительного знака. В управляющей последовательности может содержаться
строка длиной до трех восьмеричных илилюбое число шестнадцатиричных цифр,при условии,
чтоданноезначение лежит в допустимом для типа данных char диапазоне (от 0 до
0xff для Turbo C++). Большие значения ведутк появлению ошибки компиляции
"Numeric constant too large" ("числовая константа слишком
велика"). Например, восьмеричное число \777 больше максимально допустимого
значения \377, и вызовет генерирование ошибки. Первое же не-восьмеричноеили
не-шестнадцатиричное значение, встреченное в восьмеричнойили шестнадцатиричной
управляющей последовательности, означает конец данной последовательности.
В исходной версии Turbo C допускалось только три цифры
шестнадцатиричной управляющей последовательности. Новые правила ANSI C,
реализованные в Turbo C версии 2.0 и TurboC++, могут вызвать проблемы со
старыми кодами, предполагающими преобразование только первых трех символов.
Например, при использовании версии Turbo C 1.x для определения строки со
звуковым сигналом (код ASCII 7), после которого следуют числовые символы,
программист может написать:
printf("\x0072.1Простая
операционная система");
Предполагается, что эта строка будет
интерпретирована как \x007 и "2.1Простая операционная система".
Однако, Turbo C++ (и TurboC версии 2.0) компилируют ее как шестнадцатиричное
число \x0072 и литеральную строку ".1Простая операционная система".
Чтобы избежать этих проблем, перепишитеваш код следующим
образом:
printf("\x007"
"2.1Простая операционная система");
Неоднозначность может возникнуть также и в случае,
когда за восьмеричной управляющей последовательностью следует невосьмеричная
цифра. Например, поскольку 8 и 9не являются допустимыми восьмеричными цифрами,
константа \258 будет интерпретирована какдвухсимвольнаяконстанта, составленная
из символов \25 и 8.
В следующей таблице показаны допустимые управляющие
последовательности.
Управляющие последовательности
Turbo C++ Таблица 1.7
Последовательность Значение
СимволыВыполняемая функция
\a
\b
\f
\n
\r
\t
\v
\\
|
0x07BELЗвуковой
сигнал
0x08BSЗабой
0x0CFFПеревод
бланка
0x0ALFНовая
строка (перевод строки)
0x0DCRВозврат
каретки
0x09HTТабуляция
(горизонтальная)
0x0BVTВертикальная
табуляция
0x5c\Обратная наклонная черта
|
Для фактического представления символа ASCII
"обратная наклонная черта", используемого например в команде DOS
PATH, следует записывать ее как \\.
\' 0x27 ' Одинарная
кавычка (апостроф)
\" 0x22 " Двойная
кавычка
\? 0x3F ? Вопросительный
знак
\OлюбыеO = строка до трех восьмиричных цифр
\xH любыеH = строка шестнадцатиричных цифр
\XH любыеH = строка шестнадцатиричных цифр
-----------------------------------------------------------
Специальные двух-символьные константы
Turbo C++
Turbo C++ поддерживает также двух-символьные константы (например, 'An',
'\n\t' и '\007\007'). Эти константы представлены 16-битовыми значениями
типаInt, где первый символ расположен в младшем байте, а второй символ - в
старшем байте. Эти константы не могут быть перенесены на другие компиляторы C.
Символьные константы со знаком и
без знака
В C одно-символьные константы, такие как 'A', '\t' и '\ 007',
такжепредставлены 16-битовыми значениями типа Int. В этом случае происходит
расширение младшего байта в старший байт по знаку; такимобразом, еслизначение
превышает 127 (основание 10), то старший байт устанавливается равным -1
(=0xFF). Это свойство можно отменить, объявив, что по умолчанию тип char
является unsigned (при помощи опции -R TCC, либо выбором в меню Options \!
Compiler \! CodeGeneration опцию Unsigned Characters), чтоприведет к обнулению
старшего байта независимо от значения младшего байта.
Широкие символьные константы
(только C)
Символьная константа, которой предшествует L, называется
широкой символьнойконстантой и имеет тип данных wchar_t (интегральный тип,
определяемый в stdef.h). Например,
x = L 'AB';
Константы с плавающей точкой
Константа с плавающей точкой
состоит из шести частей:
- десятичное
целое
- десятичная
точка
- десятичное
дробное
- e или E и
целочисленная экспонента со знаком (опционально)
- суффикс типа: f или F, либо l или L
(опционально)
Десятичное целое или десятичное дробное (но не то и
другое) можно опустить. Можно опустить либо десятичную точку, либо букву e (или
E) с целочисленной экспонентой со знаком (но не то и другое). Эти правила
позволяют выполнять запись чисел как в обычной, так и в научной
(экспоненциальной) форме.
Отрицательные константыс плавающей точкой берутся как
положительные константы с префиксом - унарной операцией минус (-).
Примеры:
Константа Значение
6
23.45e6 23.45 x
10
.0 0
0. 0
0
1. 1.0 x 10 = 1.0
-1.23 -1.23
-5
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 <stdio.h>
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
оригинала).
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40
|