« Предыдущий пост | На главную страницу | Следующий пост »

Побитовые операции

В прошлом выпуске я рассказал о логических операциях, а этот выпуск будет посвящен побитовым операциям.

Для начала необходимо рассказать о формате представления чисел в компьютере.

Мы в нашей жизни привыкли к десятичному представлению чисел: 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

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



Все статьи по теме "Пишем советников для MetaTrader 4".

« Предыдущий пост | На главную страницу | Следующий пост »

Комментарии по теме "Побитовые операции"

не путай побитовые операции и битовые операции!!! ты счас описываеш битовые операции

На сайте разработчика языка эти операции названы побитовыми.

Буду рад, если Вы объясните, в чем они были неправы.

Разместите свой комментарий по теме "Побитовые операции"

Подписаться на мою рассылку



Размещение статьи "Побитовые операции" на Вашем сайте

Размещение статьи "Побитовые операции" на Вашем сайте возможно при условии выполнениия следующих условий:

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

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "Побитовые операции" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 3.31