_________________________________________________________________________

среда, 13 октября 2010 г.

Написание советников 8ч.

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

Как мы уже знаем, один из стандартных типов переменных в языке MetaQuotes Language 4 - тип bool. Переменная типа bool может принимать только два значения: ИСТИНА (true) и ЛОЖЬ (false). Значение ЛОЖЬ представляется в виде нулевого значения, а ИСТИНА - ненулевого.
Значение операции отношения или логической операции будет иметь тип bool.

Операции отношения
Операция
Результат
a == b
 Истина, если a равно b
 Ложь, если a не равно b 
a != b
 Истина, если a не равно b
 Ложь, если a равно b 
a < b
 Истина, если a меньше b
 Ложь, если a больше или равно b 
a <= b
 Истина, если a меньше или равно b
 Ложь, если a больше b 
a > b
 Истина, если a больше b
 Ложь, если a меньше или равно b 
a >= b
 Истина, если a больше или равно b
 Ложь, если a меньше b 
Примечание: в связи с тем, что числа с плавающей точкой (тип double) не могут быть представлены точно в связи с ограниченным количеством значащих цифр после запятой (в MetaQuotes Language 4 точность - 15 значащих цифр), нельзя производить сравнение таких чисел на равенство (==) или неравенство (!=) без предварительной нормализации (о нормализации вещественных чисел я расскажу в следующих выпусках).

Постоянный адрес статьи: "Операции отношения"

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

Напомню, что значение ЛОЖЬ (false) представляется в виде нулевого значения, а ИСТИНА (true) - ненулевого.
В этом выпуске я рассмотрю логические операции НЕ (!), ИЛИ (||) и И (&&).

Логическое отрицание НЕ (!)
Операнд A
Значение выражения !A
 ИСТИНА (true) 
 ЛОЖЬ (false) 
 ЛОЖЬ (false) 
 ИСТИНА (true) 
Пример:
bool b;
   b = false;     // переменная b равна false (ЛОЖЬ)
   b = !b;        // переменная b равна true (ИСТИНА)
   b = !b;        // переменная b равна false (ЛОЖЬ)

Логическая операция ИЛИ (||)
Результат логической операции ИЛИ равен true, если хотя бы один из операндов равен true. Если оба операнда равны false, то и результат логического ИЛИ также будет равен false.
Операнд A
Операнд B
Значение выражения A || B
 ЛОЖЬ (false) 
 ЛОЖЬ (false) 
 ЛОЖЬ (false) 
 ЛОЖЬ (false) 
 ИСТИНА (true) 
 ИСТИНА (true) 
 ИСТИНА (true) 
 ЛОЖЬ (false) 
 ИСТИНА (true) 
 ИСТИНА (true) 
 ИСТИНА (true) 
 ИСТИНА (true) 
Пример:
bool a = true;   // a равно true
   bool b = false;  // b равно false
   b = b || a;       // b равно true

Логическая операция И (&&)
Результат операции логического И будет равен true только в случае, если оба операнда равны true. Во всех иных случаях результат операции будет равен false.
Операнд A
Операнд B
Значение выражения A && B
 ЛОЖЬ (false) 
 ЛОЖЬ (false) 
 ЛОЖЬ (false) 
 ЛОЖЬ (false) 
 ИСТИНА (true) 
 ЛОЖЬ (false) 
 ИСТИНА (true) 
 ЛОЖЬ (false) 
 ЛОЖЬ (false) 
 ИСТИНА (true) 
 ИСТИНА (true) 
 ИСТИНА (true) 
Пример:
bool a = true;    // a равно true
   bool b = false;   // b равно false
   b = b && a;       // b равно false 
 
Постоянный адрес статьи: "Логические операции" 
 
Побитовые операции.

Для начала необходимо рассказать о формате представления чисел в компьютере.
Мы в нашей жизни привыкли к десятичному представлению чисел: 56, 777, 10957 и т.д. Десятичное представление числа 10957 означает, что 10957 = 1*104 +0*103+9*102+5*101+7*100. Иными словами десятичное число - это a0*100+a1*101+a2*102+...+an*10n. Т.е. сумма произведений соответствующей цифры (ai) на соответствующую степень числа 10 (10i).
В компьютере внутренний формат представления чисел - двоичный. В двоичном формате все числа состоят из нулей и единиц, а в качестве множителя используется не число 10, возведенное в степень, а соответствующая степень числа 2. Например, двоичное число 10001101 равно десятичному (обычному) числу 1*27+0*26+0*25+0*24+1*23+1*22+0*21+1*20 = 128+0+0+0+8+4+0+1 = 141.
Каждая такая двоичная цифра (1 или 0) называется битом.
Теперь мы знаем достаточно, чтобы рассмотрить побитовые операции.
Побитовые операции
  • Дополнение до единицы. В каждом разряде единица заменяется нулем, а нуль - единицей. Пример:
    int b = 141; // начальное значение переменной b равно 141,
                       // что в двоичном представлении равно 10001101
       b = ~b;      // переменная b стала равна 01110010, т.е. 114
  • Сдвиг вправо. Двоичное представление первого операнда сдвигается вправо на количество разрядов, равное значению второго операнда. Освобождающиеся "левые" разряды будут заполняться нулями. Пример:
    int b = 141; // начальное значение переменной b равно 141,
                       // что в двоичном представлении равно 10001101
       b = b >> 2;  // переменная b стала равна 00100011, т.е. 67
  • Сдвиг влево. Двоичное представление первого операнда сдвигается влево на количество разрядов, равное значению второго операнда. Появившиеся "правые" разряды будут заполняться нулями. Пример:
    int b = 141; // начальное значение переменной b равно 141,
                       // что в двоичном представлении равно 10001101
       b = b << 2;  // переменная b стала равна 1000110100, т.е. 564 
  • Побитовая операция И. Результат будет содержать единицу в тех разрядах, где соответствующие разряды первого и второго операнда содержат единицу. В других случаях соответствующий бит результата будет равен 0. Пример:
    int a = 25;  // начальное значение переменной a равно 25,
                       // что в двоичном представлении равно 00011001
       int b = 141; // начальное значение переменной b равно 141,
                       // что в двоичном представлении равно 10001101
       a = a & b;  // переменная a стала равна 00001001, т.е. 9
  • Побитовая операция ИЛИ. Результат будет содержать ноль в тех разрядах, где соответствующие разряды первого и второго операнда содержат ноль. В других случаях соответствующий бит результата будет равен 1. Пример:
    int a = 25;  // начальное значение переменной a равно 25,
                       // что в двоичном представлении равно 00011001
       int b = 141; // начальное значение переменной b равно 141,
                       // что в двоичном представлении равно 10001101
       a = a | b;  // переменная a стала равна 10011101, т.е. 157
  • Побитовая операция исключающее ИЛИ. Значение результирующего выражения будет содержать 1 в тех разрядах, в которых x и y имеют разные двоичные значения, и 0 - во всех остальных разрядах. Пример:
    int a = 25;  // начальное значение переменной a равно 25,
                       // что в двоичном представлении равно 00011001
       int b = 141; // начальное значение переменной b равно 141,
                       // что в двоичном представлении равно 10001101
       a = a ^ b;   // переменная a стала равна 10010100, т.е. 148
В следующем выпуске я расскажу о том, как можно объединить арифметическую или побитовую операцию с операцией присваивания.

Постоянный адрес статьи: "Побитовые операции"
Related Posts with Thumbnails
InstaForex