Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты по проге.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
630.61 Кб
Скачать

Операции

  1. Арифметические операции:

+ , -, *, /, % (остаток от деления, неприменима к float или double).

  1. Операции отношения:

{>, >=, <, <= }, после них по приоритету

{== , !=} – операции сравнения.

Имеют более низкий приоритет в сравнении с арифметическими операциями.

  1. Логические операции

&& - амперсанд , логическое «И» (Так же существует & - побитовое «И»).

|| - логическое «ИЛИ», дизъюнкция. (Существует побитовое «ИЛИ», |)

Приоритет && выше, чем ||, но обе имеют приоритет ниже, чем операции сравнения и отношения.

! – отрицание , превращает ненулевой операнд в 0. // if (!valid) = if (valid ==0)

Исключающее «ИЛИ» - ^(XOR) – истинно, только если всего 1 из аргументов 1.

  1. Поразрядные операции

Их можно применять к переменным, имеющим типы int, char, а также их вариантам (например, long int). Их нельзя применять к переменным типов float, double, long double. Эти операции задаются следующими символами:

  • ~ (поразрядное отрицание),

  • <<(сдвиг влево),

  • >> (сдвиг вправо),

  • & (поразрядное "И"),

  • ^ (поразрядное исключающее "ИЛИ"),

  • | (поразрядное "ИЛИ").

Примеры: если a=0000 1111 и b=1000 1000, то

~a = 1111 0000, a << 1 = 0001 1110,  (умножение на два) . Сдвиг вправо числа со знаком может привести к заполнению этих битов значением знакового бита (арифметический сдвиг) , а в других системах – нулями (логический сдвиг). a >> 1 = 0000 0111,  a & b = 0000 1000,  a ^ b = 1000 0111,  a | b = 1000 1111.

Условные выражения: выраж1? Выраж2:выраж3

Пример: z= (a>b) ? a : b; // максимальное из чисел a и b.

Операции инкремента и декремента

Они предназначены для увеличения и уменьшения на единицу значения операнда. Операции ++ и -- можно записывать как перед операндом, так и после него. В первом случае (++n или --n) значение операнда (n) изменяется перед его использованием в соответствующем выражении, а во втором (n++ или n--) - после его использования. 

Преобразование типов

Если операнды одной операции имеют разные типы, то они преобразуются. (f+i = f)

Использовать float в кач-ве индекса массива нельзя. Помещение более длинного в более короткий тип ведёт потерю информации. Неявные арифметические операции: + или * - более узкий тип расширяется до более широкого. 1. Если один лонг дабл – другой лонг дабл. 2. В противном случае, если 1 лонг ,то другой лонг, 3. Если флоат – флоат, 4. Чар и шор преобр. В инт 5. Если есть лонг,то другой лонг.

Если один ld, то и другой lg.(флоат, дабл)

Особенности операций для вещественных чисел

Вещественные числа в Си могут быть одного из трех типов: с одинарной точностью — float , с двойной точностью – double , и с расширенной точностью – long double.

Для вещественных чисел определены все стандартные арифметические операции сложения (+), вычитания (-), умножения (*), деления (/) и изменения знака (-). В отличие от целых чисел, операция нахождения остатка от деления для вещественных чисел не определена. Аналогично, все битовые операции и сдвиги к вещественным числам неприменимы; они работают только с целыми числами. Примеры операций:

Вещественные числа можно сравнивать на равенство (==), неравенство (!=), больше (>), меньше (<), больше или равно (>=) и меньше или равно (<=).

Если арифметическая операция применяется к двум вещественным числам разных типов, то менее точное число преобразуется в более точное, т.е. float преобразуется в double и double преобразуется в long double . Очевидно, что такое преобразование всегда можно выполнить без потери точности.

Замечание! Если вторым операндом в операции с вещественным числом является целое число, то целое число преобразуется в вещественное представление.

Замечание! Хотя любую целую величину можно представить в виде вещественного числа, при таком преобразовании возможна потеря точности (для больших чисел).

Представление в ЭВМ вещественных чисел

Формат чисел с плавающей запятой базируется на экспоненциальной форме записи, в которой может быть представлено любое число. Так число А может быть представлено в виде:

A = m  qn

2.3

где m - мантисса числа; q - основание системы счисления; n - порядок числа.

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

1/n  |m| < 1.

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

Преобразуем десятичное число 555,55, записанное в естественной форме, в экспоненциальную форму с нормализованной мантиссой:

555,55 = 0,55555  103 .

Здесь нормализованная мантисса: m = 0,55555, порядок: n = 3.

Число в формате с плавающей запятой занимает в памяти компьютера 4 (число обычной точности) или 8 байтов (число двойной точности). При записи числа с плавающей запятой выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы.

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

Определим максимальное число и его точность для формата чисел обычной точности, если для хранения порядка и его знака отводится 8 разрядов, а для хранения мантиссы и ее знака - 24 разряда:

0

1

1

1

1

1

1

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

знак и порядок

знак и мантисса

Максимальное значение порядка числа составит 11111112 = 12710, и, следовательно, максимальное значение числа составит:

2127 = 1,7014118346046923173168730371588  1038 .

Максимальное значение положительной мантиссы равно:

223 - 1  223 = 2(10  2,3)  10002,3 = 10(3  2,3)  107.

Таким образом максимальное значение чисел обычной точности с учетом возможной точности вычислений составит 1,701411  1038 (количество значащих цифр десятичного числа в данном случае ограничено 7 разрядами).

Самое маленькое двузначное число 10

Самое маленькое трехзначное число 100

...

Самое маленькое k-значное число 10^(k-1)

Возьмем произвольное k-значное число n. Для него выполняется неравенство:

10^(k-1)<= n < 10^k

Берём десятичный логарифм от этого неравенства:

k-1 <= lg(n) < k

Прибавим 1 ко всем частям:

k <= lg(n) +1 < k+1

Т.к. число n произвольное, а k - это его количество цифр, то это соотношение выполняется абсолютно для всех натуральных чисел. Средняя часть неравенства показывает, сколько по минимуму нужно взять цифр, чтобы число гарантированно в них поместилось.

Билет 3. Основные управляющие конструкции в С.