Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1_Типы.doc
Скачиваний:
3
Добавлен:
10.02.2015
Размер:
165.89 Кб
Скачать

0X1, 0x10, 0x2f1, 0x2a, 0xabcd0

есть объекты типа int, записанные в шестнадцатеричной системе .

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

// Десятичная константа

const int aa=15;

// Восьмеричная константа

const int aa=017;

// Шестнадцатеричная константа

const int aa=0xf;

Для объектов типа int определены пять бинарных и две унарных арифметических операций. Операции сложение, вычитание и умножение обозначаются знаками +, - и * соответственно и выполняются над объектами типа int по обычным правилам целочисленной арифметики. Две бинарных операции деления, определенные над объектами типа int, обозначаются символами % и /. Пусть и – левый и правый положительные операнды этих операций, которые называются делимым и делителем соответственно. Известно, что в этом случае всегда найдутся два числа и такие, что

, .

Операция, обозначаемая символом %, называется нахождением остатка от деления на или делением по модулю . Результатом ее выполнения является число . Из ее определения следует, что 4%2=0, 6%2=0, 5%2=1. Операция, обозначаемая символом /, называется нахождением целой части от деления на или делением нацело. Результатом ее выполнения является число . Поэтому 4/2=2, 6/2=3 и 5/2=2.

Две унарных операции называются “унарный минус” и “унарный плюс” и обозначаются знаками - и + соответственно. Унарный минус применяется для изменения знака операнда и помещается перед ним. Унарный плюс используется, как правило, по желанию программиста и размещается также перед операндом.

В Си имеется шесть бинарных операций сравнения. Результатом каждой операции может быть 0 или 1. Обозначения и названия операций приведены в табл. 1.3. Там же указаны случаи, когда результат их выполнения равен единице. Во всех остальных случаях он равен нулю.

Таблица 1.3 - Операции сравнения

Знак

Название

Результат

<

Меньше

1, если левый операнд меньше правого

<=

Меньше или равен

1, если левый операнд меньше или равен правому

>

Больше

1, если левый операнд больше правого

>=

Больше или равен

1, если левый операнд больше или равен правому

==

Равно

1, если левый операнд равен правому

!=

Не равно

1, если левый операнд не равен правому

Из определения операций сравнения следует, например, что результатами выполнения операций

3<4, 2==4 и 10!=0

будут единица, нуль и единица соответственно.

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

Таблица 1.4 - Логические операции

Знак

Название

Результат

&&

Логическое И (конъюнкция)

1, если оба операнда отличны от нуля. 0 в остальных случаях.

||

Логическое ИЛИ (дизъюнкция)

0, если оба операнда равны нулю. 1 в остальных случаях.

!

Логическое НЕ (отрицание)

1, если операнд равен нулю, и 0 в остальных случаях.

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

4&&3, 1&&0, 0||10 и !9

будут единица, нуль, единица и нуль соответственно.

Восемь следующих операций называются операциями присваивания. Шесть из них являются бинарными и две – унарными. По правилам, левые операнды бинарных операций и единственные операнды унарных операций должны всегда быть переменными. Операции присваивания служат для изменения значения существующей переменной, стоящей слева от знака бинарной операции, и единственной переменной, если операция является унарной. Обозначения и названия операций присваивания приведены в табл. 1.5.

Таблица 1.5 - Операции присваивания

Знак

Название

знак

Название

=

Присваивание

/=

Получение целой части с присваиванием

+=

Сложение с присваиванием

%=

Получение остатка с присваиванием

-=

Вычитание с присваиванием

++

Увеличение на 1

*=

Умножение с присваиванием

--

Уменьшение на 1

Первые шесть операций, приведенные в таблице, являются бинарными. Результатом выполнения операции, обозначаемой символом =, является правый операнд. Результатом выполнения операции += является значение переменной из левой части, увеличенное на значение правого операнда. Результатом выполнения операции -= является значение переменной из левой части, уменьшенное на значение правого операнда. Результатом выполнения операции *= является значение переменной из левой части, умноженное на значение правого операнда. Результатом выполнения операции /= является целая часть от деления переменной из левой части на значение правого операнда. Результатом выполнения операции %= является остаток от деления переменной из левой части на значение правого операнда.

Важная особенность унарных операций состоит в том, что их знак можно размещать как до, так и после переменной. В результате выполнения операции “увеличение на 1” значение переменной увеличивается на 1. При выполнении операции “уменьшение на 1” значение переменной уменьшается на 1. Если знак ++ (или --) унарной операции присваивания находится перед переменной, то такая форма применения операции называется префиксной. В противном случае - постфиксной. Выполнение операции, записанной в префиксной форме, начинается с изменения значения переменной, за которым следует ее использование. Выполнение операции, записанной в постфиксной форме, начинается с использования переменной, за которым следует изменение ее значения. Например,

int aa=2, bb, сс;

bb=++aa; // aa равняется 3, bb равняется 3

cc=aa++; // aa равняется 4, cc равняется 3

Единственной тернарной операцией в языке Си является операция “условие”, которая имеет следующий вид:

aa ? bb : cc

Если операнд aa отличен от нуля, то результатом выполнения этой операции будет операнд bb, в остальных случаях – операнд cc. Операцию “условие” удобно применять для вычисления, например, наибольшего из двух чисел:

int aa=3, bb=4, cc;

// …

cc=(aa>=bb)?aa:bb; // cc равняется 4

Побитовые операции…

Необходимо отметить, что в первой редакции языка Си для хранения типа int отводилось только шестнадцать бит (два байта). Для работы с большими (тридцати двух битовыми) числами требовалось применять тип long int. В современных редакциях языка Си для работы с 16-разрядными целыми числами предлагается использовать тип short int или кратко short. Если для решения задачи достаточно только положительных целых чисел, то целесообразно использовать тип unsigned int.

1.4 Типы float, double и long double

Объекты типа float. Типы double и long double. Представление объектов с плавающей точкой. Операции над объектами с плавающей точкой.

Тип float является конечным множеством вещественных чисел со знаком. Для хранения каждого объекта типа float отводится четыре байта памяти (или 32 двоичных цифры ). При этом каждый объект x представляется в виде произведения двух сомножителей и знака sgn(x). Для хранения знака используется двоичная цифра . При этом =1 означает знак минус, а =0 – знак плюс. Одним из двух сомножителей служит степень с основанием два и целым двоичным показателем p, который называется порядком числа. Для хранения порядка и его знака используется восемь двоичных цифр . Другим сомножителем является двоичная дробь вида m=0.m-0m-1...m-23, называемая мантиссой числа. В соответствии с правилами m-0=1, а для хранения оставшейся части мантиссы используются двадцать три двоичных цифры .

Таким образом, число x типа float имеет вид

x=sgn(x)m*2p.

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

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

Объекты типа float, double и long double, по определению, являются вещественными числами. Для их представления в текстах программ применяются два способа. В соответствии с первым число изображается десятичной дробью, в которой вместо запятой, используется точка. Во втором случае вещественное число представляется в виде произведения двух множителей. Один из них является десятичным числом (целым или дробным), а другой - положительной степенью по основанию десять с целым показателем. При этом основание степени изображается буквой E или e. Если представление числа заканчивается буквой (суффиксом) f или F, то компилятор относит его к типу float и выделяет для хранения четыре байта. При суффиксе l или L число относится к типу long double и для его хранения выделяется десять байтов. При отсутствии суффикса компилятор относит его к типу double и выделяет для хранения восемь байт. Отрицательные числа должны начинаться со знака “-”. Ниже приводятся примеры правильных представлений вещественных чисел:

1.23, -4.е2, 10.11f, -2Е-12L.

Первые два числа имеют тип double, третье - float, а четвертое - long double.

Для объектов типов float, double и long double (объектов с плавающей точкой) определены те же операции, что и для объектов типа int за исключением операций деления % и побитовых операций.

1.5. Тип char

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

n = 200 + 211 + ... + 277,

то в этом случае тип char является множеством {0,...,255} из 256 целых положительных чисел. Во втором варианте двоичная цифра 7 используется для хранения знака числа. В этом случае тип char является множеством {-128,...,127} из 256 целых положительных и отрицательных чисел. Для того, чтобы не зависеть от конструкции арифметико-логического устройства, программисты должны использовать тип unsigned char при работе с беззнаковыми (только положительными) числами и тип signed char – при работе с положительными и отрицательными.

Для представления чисел типа char в текстах разрешается использовать один из двух способов. В первом случае число записывается в соответствии с правилами, принятыми в позиционных системах счисления с основаниями 8 или 16. Если представление числа начинается с префикса, состоящего из наклоненной влево черты \, то компилятор рассматривает его как восьмеричное. При использовании префикса, состоящего из двух символов \x или \X, число рассматривается компилятором как шестнадцатеричное. Применять другие основания не разрешается. Перед префиксом и после последней цифры числа необходимо поместить по одному апострофу. Представление отрицательных чисел должно начинаться со знака минус. Ниже приводятся примеры правильного представления чисел типа char и его модификаций:

‘\33‘, ‘\124‘, -‘\77‘, ‘\x5a‘, ‘\xff‘.

Конструкции ‘\138‘, ‘\1c‘ и ‘\x1ff‘ являются недопустимыми, так как символы “8” и “с” не являются восьмеричными цифрами, а шестнадцатеричное число 1ff слишком велико для типа char. В каждом из этих трех случаев компиляция программы будет остановлена с указанием характера обнаруженной синтаксической ошибки и номера содержащей ее строки. Объект типа char, у которого все цифры равны нулю, принято называть нуль-символом. Для его обозначения применяется обычно восьмеричная система счисления: ‘\0’.

Главное назначение типа char заключается в том, что он используется для хранения символов алфавита. Выше уже отмечалось, что взаимно однозначное соответствие межу символами и беззнаковыми объектами типа char задается кодовой страницей. Оно позволяет вместо числа указывать обозначаемый этим числом символ, заключенный в апострофы. Например, конструкции ‘A‘, ‘a‘ и ‘0‘ обозначают числа 65, 97 и 48 соответственно. Второй способ используется, как правило, при обработке информации, представленной в виде текста.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]