Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C_C++ / Lesson1 / Elementy_yazyka_S

.pdf
Скачиваний:
73
Добавлен:
10.02.2015
Размер:
826.71 Кб
Скачать

int a=5; float b=a;

Явное преобразование типа int в тип float с помощью операции преобразования типов (тип в явном виде указывается в скобках перед преобразуемой переменной):

int a=5; float b=(float)a;

Если в качестве операнда используется числовая константа, то тип операнда устанавливается в зависимости от значения константы. Константа, представленная целым числом, может быть типаint,long,unsigned int или unsigned long в зависимости от ее значения и от формы записи. По умолчанию компилятор приписывает константе тип наименьшего размера, в ячейку которого может уместиться константа. Но это правило имеет исключение: всем вещественным константам, даже самым маленьким, приписывается тип double.

Большинство компиляторов обеспечивает стандартный синтаксис языка C, согласно которому в символьной константе может быть только один печатный символ или один управляющий код. Следуя стандартному синтаксису, символьная константа требует один байт памяти и имеет тип char.

Строковый литерал состоит из последовательности символов, заключенных в кавычки, и представляется в памяти как массив элементов типа char, инициализируемый указанной последовательностью символов. Следует помнить, что последним символом строки (строкового литерала) всегда является нулевой символ, который автоматически добавляется при хранении строки в памяти.

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

В языках C и C++ выражение рассматривается как имеющее значение true, если результат вычислений не равен нулю, и false в противном случае.

Операции

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

К арифметическим операциям относятся операции сложения (+), вычитания (– ), умножения (*), деления (/) и деления по модулю (%) – вычисление остатка от деления. В языке отсутствует операция возведения в степень.

В одном и том же выражении могут встретиться переменные и константы разных типов, в этом случае они преобразуются к старшему типу в соответствии с приоритетами типов, установленными в языке C: long double – double – float – unsigned long – long – unsigned int – int

unsigned char – char.

В этом перечислении наивысший приоритет имеет

типlong double. Компилятор преобразует ―меньший‖ тип в ―больший‖. Например, если в выражении операнды имеют

типыlong double,double,float и т. д., то все они на время вычислений автоматически преобразуются к старшему типу. В данном случае это будет типlong double. Тип результата будет соответствовать старшему типу в выражении.

Отметим, что в соответствии с правилами выполнения вычислений в C при делении двух операндов целого типа результат также является целочисленным и формируется путем отбрасывания дробной части частного от деления: 4/7=0; 7/4=1.

Деление по модулю выполняется над операндами целого типа и результатом операции является остаток от деления: 7%4=3; 4%7=0.

Приоритеты арифметических операций:

умножение, деление, деление по модулю;

сложение, вычитание.

Операции одного уровня выполняются слева направо.

Помимо стандартных арифметических операций используются две дополнительных операции: инкремент (++) и декремент (– –). Результатом выполнения инкремента будет увеличение значения операнда на 1, результат декремента – уменьшение операнда на 1. Обе операции идентичны, поэтому рассмотрим на примере только операцию инкремента (увеличения).

Операция инкремента реализуется в двух видах:

++х;

x++;

аналогично декремент:

––х;

x––;

где х – идентификатор переменной.

Строго говоря, ограничений на тип переменной нет, но реально эти операции работают с переменными целого типа.

Результатом операции является увеличение значения переменной х на 1, причем в первом случае х сначала увеличивается на 1, а затем используется в дальнейших операциях, а во втором – значение х сначала используется, а потом увеличивается на 1. Различие операций сказывается при использовании

их в сложных выражениях. Например, определить значения x,t,z,y после вычисления выражений при х=1, t=1:

y=++x; z=t++;

Ответ: x=2; t=2; z=1; y=2.

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

операции не следует использовать по отношению к переменным, которые встречаются в выражении более одного раза, т. е. не следует использовать выражение типа х*х++;

операции инкремента и декремента можно применять только к переменным, а не к результату, т. е. выражение (х*y)++ неверное;

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

Данные операции имеют более высокий приоритет по сравнению с другими арифметическими операциями.

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

Операция присваивания определена в двух видах: простое и составное присваивание.

При простом присваивании, обозначаемом знаком (=), значение левого операнда заменяется значением правого операнда с соответствующим преобразованием типа правого операнда.

Структура оператора x=W,где х – переменная; W – выражение, например, x=2; y=k–8.

В приведенной структуре оператора W является выражением, поэтому оно может содержать и операции присваивания. Если в выражении присутствуют несколько операций присваивания, то они выполняются справа налево,

например, x=y=z=6.8;

При составном присваивании используются следующие операции:

+=, –=, *=, /=, %=.

Формат операции составного присваивания: x OP W

где x – переменная, OP операция, W выражение.

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

Например, пустьх=–4:

Операция Результат

х+=3; х=–1

х–=3; х=–7

х*=4; х=–16

Если порядок выполнения операций не определен круглыми скобками, то их приоритеты приведены в табл. ниже, при этом высший приоритет имеют операции инкремента и декремента, а наименьший – присваивания.

++, ––

Справа налево

 

*, /, %

Слева направо

Порядок выполнения

+, –

Слева направо

операций одного уровня

=,*=,/=,%=,+=,–=

Справа налево

 

Например, определить значение выражений W при x целого типа.

Выражение

Результат

 

W=(2+3)*6; W=30;

W=(12+6)/3*2; W=12;

W=3+2*(х=7/2); W=9;

W=3+2*(х=7%2); W=5.

Побитовое отрицание (NOT)

Побитовое отрицание (или побитовое НЕ, или дополнение) — это унарная операция, действие которой эквивалентно применению логического отрицания к каждому биту двоичного представления операнда. Другими словами, на той позиции, где в двоичном представлении операнда был 0, в результате будет 1, и, наоборот, где была 1, там будет 0. Например:

НЕ 01

10

Побитовое И (AND)

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

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

Пример:

И 00110101

0001

Побитовое ИЛИ (OR)

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

Пример:

ИЛИ 00110101

0111

Сложение по модулю два (XOR)

Сложение по модулю два (или двухместная операция исключающее ИЛИ) — это бинарная операция, результат действия которой равен 1, если число складываемых единичных битов нечетно, если же их число четно, то результат равен 0.

Пример:

Искл. ИЛИ 00110101

0110

Первое русское название операции обусловлено тем, что результат данной операции отличается от результата «ИЛИ» только в одном случае из 4 случаев входа — обоих 1 (случай одновременной истинности аргументов «исключается»). Ещѐ в русской грамматике значение данной логической связки передаѐтся союзом «либо».

Второе название — тем, что действительно является сложением в кольце вычетов по модулю два, из чего следуют некоторые интересные свойства. Например, в отличие от вышеописанных «И» и «ИЛИ», данная операция

является обратимой, или инволютивной: .

В компьютерной графике «сложение по модулю два» применяется при выводе спрайтов на картинку — повторное еѐ применение убирает спрайт с картинки. Благодаря инволютивности эта же операция нашла применение в

криптографии как простейшая реализация идеального шифра (шифра Вернама). «Сложение по модулю два» также может использоваться для обмена двух переменных, используя алгоритм обмена при помощи исключающего ИЛИ.

Битовые сдвиги

К битовым операциям также относят битовые сдвиги. При сдвиге значения битов копируются в соседние по направлению сдвига. Различают несколько видов сдвигов — логический, арифметический и циклический, в зависимости от обработки крайних битов.

Также различают сдвиг влево (в направлении от младшего бита к старшему) и вправо (в направлении от старшего бита к младшему).

Логический сдвиг

Арифметический сдвиг (правый)

Циклический сдвиг

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Циклический сдвиг через перенос

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Язык

НЕ

 

И

 

ИЛИ

 

Искл.

 

Сдвиг

 

Сдвиг вправо

Другие

 

 

 

 

 

 

 

 

ИЛИ

 

влево

 

 

 

 

 

 

 

 

 

 

 

 

C/С++, Java, C#[4]

~

&

|

^

<<

>>

 

Соседние файлы в папке Lesson1
  • #
    10.02.20156.15 Кб47.DS_Store
  • #
    10.02.20154.1 Кб46._.DS_Store
  • #
    10.02.20154.1 Кб46._1
  • #
    10.02.20154.1 Кб48._Elementy_yazyka_S.pdf
  • #
    10.02.2015826.71 Кб73Elementy_yazyka_S.pdf