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

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

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

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

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

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

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

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

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

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

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

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


Рассылки Subscribe.Ru
Методы анализа рынка ФОРЕКС / FOREX. Торговые стратегии

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

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

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

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

Журнал FOREX MAGAZINE:



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

Счетчики:

Рейтинг@Mail.ru Rambler's Top100
Рассылка 'Методы анализа рынка ФОРЕКС / FOREX. Торговые стратегии'
Авторские права © 2005-2006 Андрей Ведихин

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

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


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