рефераты

рефераты

 
 
рефераты рефераты

Меню

Реферат: 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