0( false ) | 1 ( true ) равно 1( true )

_________________

62 стр. Часть 1. Первое знакомство с С++

    Таблица 4.3. Таблица истинности оператора &

      &  1 0

      1   1 0

      0   0 0 

В таблице столбцы соответствуют значению одного аргумента, а строки — второго; результат операции находится на пересечении соответствующих строки и столбца. Так, из таблицы видно, что получить в результате операции & можно только если оба операнда равны 1. Далее в табл. 4.4 приведена таблица истинности оператора | ( ИЛИ ).

    Таблица 4.4. Таблица истинности оператора |

      |   1 0

      1  1 1

      0  1 0

Для последнего логического оператора, называемого "исключающее или" ( XOR ), прямой аналог в повседневной жизни найти труднее. Он возвращает значение true, если истинным является какой-то один ( но не оба! ) из его аргументов. Таблица истинности этого оператора представлена ниже ( табл. 4.5 ).

    Таблица 4.5. Таблица истинности оператора ^

      ^  1 0

      1  0 1

      0  1 0

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

<p id="chapter4.4.2"><strong><emphasis>Использование побитовых операторов...63</emphasis></strong></p>

Побитовые операторы работают отдельно с каждым битом.

Побитовые операторы выполняются подобно любым другим арифметическим операторам. Самым лёгким для понимания является оператор ~ . Выполнить операцию ~ над числом означает выполнить её над каждым битом числа.

      ~01102 ( 0х6 )

       10012 ( 0x9 )

Таким образом получаем, что ~0x6 равно 0x9. В следующем примере продемонстрировано выполнение оператора &:

      01102

      &

      00112

      00102

Вычисляем, начиная со старших битов: 0 & 0 равно 0. В следующем бите 1 & 0 равно 0. В третьем бите 1 & 1 даёт 1, а в последнем бите 0 & 1 даёт 0.

_________________

63 стр. Глава 4. Выполнение логических операций

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

      0x06        01102

      &             &

      0x03        00112

      0x02        00102

Расписав числа таким образом, мы получили, что 0x6 & 0x3 равно 0x2. ( Попробуйте подсчитать значение выражения 0х6 | 0x3. Если вам это удастся, вы почувствуете себя на седьмом небе. Иначе очутитесь на первой из семи ступенек в преисподнюю. У меня на это ушло чуть меньше восьми минут. )

<p id="chapter4.4.3"><strong><emphasis>Простой пример...64</emphasis></strong></p>

Следующая программа иллюстрирует работу побитовых операторов. В ней инициируются две переменные, к которым применяются операции &, |, ~, ^. Результаты вычислений выводятся на экран.

      /* BitTest — инициируются две переменные */

      /*          выводятся  результаты выполнения */

      /*            операторов |, ^, ~ и &  */

      #include

      #include

      #include

      using namespace std ;

      int main( int nNumberofArgs , char* pszArgs[ ] )

      {

         /* отмена формата по умолчанию( десятичного ), или можно и так отменить cout.unsetf( cout.dec ) */

         cout.unsetf( ios::dec ) ;

         /* теперь можно установить вывод переменных в шестнадцатеричном виде */

         /* установка вывода переменных в шестнадцатеричном виде, или можно и так cout.setf( cout.hex ) */

         cout.setf( ios::hex ) ;

         /* инициализация двух аргументов */

         int nArg1 ;

         nArg1 = 0x1234 ;

         int nArg2 ;

         nArg2 = 0x00ff ;

         /* Выполнение логических операций */

         /* Сначала применяем унарный оператор NOT */

         cout << "Arg1          = 0x" << nArg1 << "\n" ;

         cout << "Arg2          = 0x" << nArg2 << "\n" ;

         cout << "~nArg1        = 0x" << ~nArg1 << "\n" ;

         cout << "~nArg2        = 0x" << ~nArg2 << "\n" ;

         /* Теперь — бинарные операторы */

         cout << "nArg1 & nArg2 = 0x"

               << ( nArg1 & nArg2 )

               << "\n" ;

         cout << "nArg1 | nArg2 = 0x"

               << ( nArg1 | nArg2 )

               << "\n" ;

         cout << "nArg1 ^ nArg2 = 0x"

               << ( nArg1 ^ nArg2 )

               << "\n" ;

Перейти на страницу:

Все книги серии Для чайников

Похожие книги