Инструкции

Справочный раздел

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

Разделы инструкций

В сети

Пользователей: 156
Из них просматривают:
Аналоги: 60. Даташиты: 27. Инструкции: 5. Новости: 4. Обзор: 1. Производители: 2. Профиль пользователя: 1. Форум: 56.
Участников: 2
Гостей: 154

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.
Оглавление

Выражения

Выражение - это запись алгоритма вычислений над операндами при помощи знаков математических, логических и прочих действий. Другими словами: выражение - есть формула вычислений, записанная средствами языка программирования.

 
В определении выражения использован новый термин: операнд. Операнд - это выражение, над которым выполняется какое-либо действие. Как видите, операнд и выражение оказываются определенными друг через друга. Надеюсь, для образованного человека не составит труда представить себе, что же такое выражение на самом деле - для этого достаточно вспомнить, что такое математическое выражение.

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

 
Действия могут выполняться над двумя операндами или над одним операндом -унарные операции.

 
В Си определены следующие унарные математические операции:

Знак       Операция
Унарный минус, признак изменения знака числа на противоположный
+Унарный плюс, означает сохранение знака числа без изменения (принципиального смысла не имеет)
++Знак инкремента, увеличение операнда на 1
--Знак декремента, уменьшение операнда на 1
~Побитовая инверсия числа

 

Математических операций над двумя операндами больше:

ЗнакОперация
+Сумма операндов
Разность операндов
*Произведение операндов
/Частное операндов
%Остаток от целочисленного деления операндов
|Побитовая операция ИЛИ над операндами
&Побитовая операция И над операндами
^Побитовая операция ИСКЛЮЧАЮЩЕЕ ИЛИ над операндами
>>Побитовый сдвиг влево
<<Побитовый сдвиг вправо

 

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


Унарная логическая операция всего одна:

ЗнакОперация
!Логическое отрицание (НЕ)                                                 

 

Логических операций над парой операндов больше:

ЗнакОперация                                                                           
||Логическое ИЛИ
&&Логическое И
>Больше
<Меньше
==Эквивалентно
!=Не эквивалентно
<=Меньше или равно
>=Больше или равно

 

 Важно понимать, что для логических выражений определено лишь два значения результата: ИСТИНА и ЛОЖЬ, причем истинным в Си считается любое не равное нулю значение, а ложным – значение ноль.

 
Вот несколько примеров логических и арифметических выражений:

5+2*3- арифметическое выражение, эквивалентное 11
(5+2) * 3 - арифметическое выражение, эквивалентное 21
5 + var * (3 + Ь) - арифметическое выражение с использованием переменных
(5 > 2) - логическое выражение со значением ЛОЖЬ
(2-7) >= -11 - логическое выражение со значением ИСТИНА
(2-7) >= 0 - логическое выражение со значением ЛОЖЬ

 

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

 
Особняком стоит операция, обозначаемая символом «?» -условная операция. Эта операция имеет достаточно сложную форму записи:
<выражение1> ? <значение1> : <значение2>


Операция позволяет выбрать в качестве своего результата одно из значений - значение1 или значение2 в зависимости от того, истинно или ложно выражение1. В качестве обоих значений могут использоваться так же выражения.
Пример:
х > 5 ? 4 : 8 - если х будет меньше или равно 5, то результат операции будет 8, а если х будет больше 5 - результат будет 4.

 
Смысл в выражениях был бы невелик, если бы результат их вычислений было бы невозможно присваивать значениям переменных. Для присвоения значения переменной используется оператор присваивания, обозначаемый символом «=»:

var = 5 + 2; // присвоить переменной var значение выражения 5 + 2, т.е. 7


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


int var =5; // описанная переменная var имеет тип int и значение 5


В операторе присваивания левее знака «=» должно находиться так называемоелеводопустимое выражение, т.е. либо переменная, либо такое выражение, результатом которого будет значение указателя, который покажет место в памяти для хранения результата. Правее знака равенства может находиться любое праводопустимое выражение, т.е. в сущности, любое выражение. Интересный момент возникает, если и слева и справа от знака равенства используется одна и та же переменная:


S = S  + 5;


Такое выражение следует понимать так: «присвоить переменной S значение, равное сумме ее текущего значения и числа 5». Можно записать то же самое более коротким способом:


S += 5;


В данном примере использован двойной оператор «+=», называемый присваивание с суммированием. Значение этого оператора то же самое: увеличение значения переменной на число правее оператора. Кроме присваивания с суммированием допустимы аналогичные комбинации для присваивания с разностью, с умножением, делением или остатком от деления, записываемым соответственно так: «-=», «*=», «/=» или «%=». Любой такой оператор «разворачивается» аналогично рассмотренному:

a *= 2   равносильно  a = a * 2
a /= 2   равносильно  a = a / 2
a -= 2   равносильно  a = a – 2
a %= 2 равносильно  a = a % 2

 

Несколько слов о присваивании значений переменным типа указатель. Как было сказано, указатель есть ни что иное, как адрес объекта в памяти, соответственно в качестве значения можно ему присваивать только адрес. Делается это при помощи унарного оператора взятия адреса & (не путать с побитовой операцией И !!!):
    

int *ptr;

int var;

ptr = &var;


В этом примере объявлен указатель ptr на переменную типа int и переменная var этого типа; далее происходит присваивание указателю значения адреса переменной var.


Теперь операторы

 
*ptr = 12;

 
и

 
var = 12;

 

приведут к одинаковому результату.

 
Иногда требуется обратиться к какому-либо участку памяти, который явно не является конкретной переменной, т.е. адрес участка известен, но соответствующего ему описанного в программе объекта нет. В этом случае следует использовать прием, названный явным приведением типа:

ptr = (int *)0x1000;

 
Пример показывает, как указателю ptr присваивается значение адреса 0x1000, т.е. происходит «обман» бдительного компилятора: ему подсовывают указание воспринимать число, как адрес переменной типа int, хотя не известно, что именно находится по этому адресу фактически. Приведение типов приходится делать всегда, когда типы операндов не соответствуют желаемым.

 

 

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.

Разное

Интересно

Ремонтируя импульсный блок питания (ИБП), отключите его от компьютера и нагрузите лампочкой 75 Вт на 220 В.
Так Вы убережете контроллеры и платы компьютера от повреждения из-за возможных скачков напряжения, возникающих при ремонте ИБП