Язык программирования С++

Автор работы: Пользователь скрыл имя, 01 Марта 2010 в 23:39, Не определен

Описание работы

Язык программирования С++
(Лекции)

Файлы: 1 файл

90146_lekcii_programmirovanie_na_yazyke_si.doc

— 1.04 Мб (Скачать файл)

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

      Операции  сложения, вычитания, умножения и  деления можно использовать ко всем типам данных. Если операнды одного типа, то результат будет того же типа. Например, вычисляя выражение 12/5, так как операнды целые числа, то в результате получим целое число 2 (округление не выполняется). С другой стороны, если рассчитывается выражение 12./5, результатом будет вещественное число 2.4.

      Операция  деление по модулю используется при  необходимости вычисления остатка  от деления целых чисел, например, при вычислении выражения 17%3, результатом  будет целое число 2.

     4.3. Операции присваивания

     Эти операторы имеют наименьший приоритет при вычислении выражений, т.е. выполняются в последнюю очередь (за исключением оператора запятая). В языке Си знак равенства означает выполнение операции присваивания. Например, выражение

      x=10+3*4;

означает, что вначале вычисляется выражение слева от знака равенства и затем результат присваивается переменной x. Поэтому выражения

     x=x+2;

приобретают при программировании строго определенный смысл: вначале вычисляется выражение справа от знака равенства (к старому значению переменной x прибавляется число 2) и затем полученный результат присваивается переменной x.

      Оператор  присваивания выполняется справа налево. В языке Си возможно использования выражений с несколькими операторами присваивания, например, допустимо использовать следующее выражение

      с=b=5*(a=5*45);

Оно выполняется  в следующем порядке: вычисляется  значение 5*45, результат присваивается  переменной ‘а’, затем эта переменная умножается на 5 и результат присваивается  переменной ‘b’, и далее присваивается переменной ‘c’.

      Помимо  традиционной операции присваивания в  языке Си существуют дополнительные операции: +=, –=, *=  и т.п. Например, операции слева и справа в приведенной ниже  таблице идентичны

a=a+10; a+=10;
a=a/10; a/=10;
a=a&64; a&=10;
a=a>>1; a>>=1;
 

Достоинства этих операции – они выполняются быстрее, чем операции с обычным присваиванием.

     4.3.1.Пример 4.1

    Пример  использования арифметических операций и операций присваивания:

      Листинг 4.1

    #include <stdio.h>

    void main()

    {

    int a=25,b=3,с,d;

    float x=25.,y=3,z;

    c=a/b;

    d=a%b;

    printf(“Деление целых чисел: %d\nОстаток: %d\n”,c,d);

    z=x/y;

    printf(“Деление вещественных чисел: %d %d\n”,c,d);

    a=a+10;

    y=y*3;

    printf(“Традиционная форма операции присваивания: %d %f\n”,a,y);

    a+=10;

    y*=3;

    printf(“Присваивание со сложение и умножением: %d %f”,a,y);

    }

 

Результат выполнения программы:

    Деление целых чисел: 8

    остаток: 1

    Деление вещественных чисел: 8.333333

    Традиционная  форма операции присваивания: 35  9.000000

    Присваивание  со сложение/умножением: 45  27.000000

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

     Эти операции позволяют сравнивать друг с другом данные, например:

     x>0   y<=x   z!=27   g==’\n’

     Значения  переменных после выполнения операции сравнения не изменяется, каждое выражения проверяется – истинно оно или ложно. В языке Си истинному значению выражения с операцией отношения соответствует единичный результат, ложному – нулевой. Например, выражение

     y=x>5;

     определяет  значение переменной ‘у’ равным единице  для ‘x’ равным 25 и равным нулю для ‘х’ равным –5.  

     Согласно  табл. 4.1. наибольшим приоритетом обладает операции ‘<’ и ‘>’, наименьшими равенство и неравенство. Поэтому, например, выражение

     (x>5 == y<10)

будет выполняться в следующем порядке:

     – сравнение y<10;

     – сравнение x>5;

     – сравнение на равенство.

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

     В языке Си отсутствуют данные типа булева переменная, но существуют логические операции, в которых можно использовать данные типа символ или целое в любой модификации. При этом подразумевается, что нулевое значение выражения соответствует значению «FALSE» (ложь), а любое другое – значению «TRUE» (истина). Эти операции: логическое умножение && (операция И), сложение || (операция ИЛИ) и отрицание ! (операция НЕ). Результат выполнения этих операций для различных значений целых переменных a и b приведен в табл. 4.2.

     Таблица 4.2.

Значение  
переменной
a
Значение  
переменной
b
Результат
a&&b a||b !a !b
ноль ноль 0 0 1 1
ноль отлично от ноля 0 1 1 0
отлично от ноля ноль 0 1 0 1
отлично от ноля отлично от ноля 1 1 0 0
 

     Следует отметить, что «истинным» значением  переменной считается не только ее положительное значение, но и отрицательное. Если выражение при выполнении логической операции является «истиной», то результату присваивается значение единица, в противном случае – нулевое значение.

     4.5.1. Пример 4.2

      Листинг 4.2

     #include <stdio.h>

     void main()

     {

     int x=5,y=-3;

     printf(“x&&y x||y !x  !y  x>3 y>0\n”);

     printf(“%3d  %3d %3d %3d %3d %3d”,x&&y,x||y, !x, !y,x>3,y>-10);

     }

 

Результатом исполнения программы будут строки на экране

     x&&y x||y !x  !y  x>3 y>0

       1    1   0   0   1   0

     Согласно  табл. 4.1. наибольшим приоритетом среди  логических операций обладает операция НЕ. Поэтому, например, оператор

     z=a&&b||!c&&d;

будет выполняться в следующем порядке:

     – операция НЕ переменной c;

     – операция И операндов  a  и b;

     – операция И операндов  (!c)  и d;

     – операция ИЛИ операндов  (a&&b)  и (!c&&d).

     Логические  операции можно использовать и для  реализации сложных неравенств. Например, для составления условия 10<x<20 в языке Си необходимо записать логическое выражение (x>10 && x<20), а математическое выражение x<10Èx>20  можно представить в виде (x<10 || x>20).

     4.6. Битовые операции

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

     Каждая  из битовых операций служит определенным целям. Например, операция & (И) полезна  для проверки единичных значений отдельных битов числа, а также для установки определенных битов в «0». Операция | (ИЛИ) полезна для установки в «1» битов. Операция ^ (Исключающее ИЛИ) используется для проверки несовпадения битов. Операции сдвига << и >> позволяют сдвинуть все биты числа влево/вправо на заданное количество разрядов. Недостающие значения битов дополняются нулями, информация в исчезающих битах теряется.

     Примеры использования битовых операций приведены в табл. 4.3. Все переменные a, b, z этой таблицы типа unsigned char. Язык Си не умеет работать с данными в двоичном формате, но для упрощения понимания работы каждое число представлено в двоичном формате (например, для первой строки a=20210=110010102, b=15510=100110112).

       Таблица 4.3.

Операция 1 операнд 2 операнд Результат Комментарий
НЕ a=11001010 b=10011011 z=~a=00110101

z=~b=01100100

Инвертируются все биты числа
И a=10011010 b=11110000 z=a&b=10010000 На число a накладывается маска (число b) – выделяются значения 4 старших битов числа а, младшие биты обнуляются
ИЛИ a=10011010 b=00001111 z=a|b=10011111 Четыре младших  бита числа a устанавливаются в единичное состояние, старшие биты остаются без изменения
Исключающее ИЛИ a=10011010 b=00001111 z=a^b=10010101 Старшие биты числа a остаются без изменения, младшие – инвертируются
Сдвиг вправо a=10011010 b=00001111 z=a<<1=00110100

z=b<<3=01111000

Выполняется сдвиг  вправо всех битов числа a на один разряд, числа b – на три разряда. Происходит потеря старших битов, установленных в «1»
Сдвиг влево a=10011010 b=00001111 z=a>>2=00100110

z=b>>1=00000111

Выполняется сдвиг  влево всех битов числа a на два разряда, числа b – на один разряд. Происходит потеря младших битов, установленных в «1»

Информация о работе Язык программирования С++