Скачать книгу

которая переводит введенное положительное число в двоичное систему счисления и выводит на экран результат перевода.

      Пример решения задания в Листинге 11.

      Листинг 11

      #include <iostream>

      using namespace std;

      void dv(int a)

      {

      int b[100];

      int i=0;

      while(a>1)

      {

      b[i]=a%2;

            a=(a-a%2)/2;

            i++;

      }

      b[i]=a;

      for(int j=i;j>=0;j–)

      cout<<b[j];

      }

      int main()

      {

      int a;

      cin>>a;

      dv(a);

      return 0;

      }

      Ниже даны тесты для проверки задач программы.

      Тест 1

      a=10

      Результат

      1010

      Тест 2

      a=2

      Результат

      10

      Тест 3

      a=8

      Результат

      1000

      Поразрядные операции применимы только к целочисленным аргументам (char, short, int и long).

      & – поразрядное И

      | – поразрядное включающее ИЛИ

      ^ – поразрядное исключающее ИЛИ

      << – сдвиг влево

      >> – сдвиг вправо

      ~ – одноместное поразрядное дополнение до единицы

      В побитовых операциях работа идет над каждым битом.

      Поразрядное включающее ИЛИ

      Пример:

      8 | 10 = 10

      8 – это 1000 в двоичной системе счисления, 10 – это 1010 в двоичной системе счисления. С каждым битом числа выполняется операции логическое ИЛИ, и вместо этого бита ставится результат этой операции, смотри Рисунок 4.

      

      Рисунок 4

      Поразрядное И

      Пример:

      8 & 10 = 8

      8 – это 1000 в двоичной системе счисления, 10 – это 1010 в двоичной системе счисления. С каждым битом числа выполняется операции логическое И, и вместо этого бита ставится результат этой операции.

      Пример программы в Листинге 12.

      Листинг 12

      #include <iostream>

      using namespace std;

      void dv(int a)

      {

      int b[100];

      int i=0;

      while(a>1)

      {

      b[i]=a%2;

            a=(a-a%2)/2;

            i++;

      }

      b[i]=a;

      for(int j=i;j>=0;j–)

      cout<<b[j];

      }

      int main()

      {

      int a,b;

      int c;

      cin>>a>>b;

      c=a|b;

      cout<<endl;

      dv(a);

      cout<<" | ";

      dv(b);

      cout<<" = ";

      dv(c);

      c=a&b;

      cout<<endl;

      dv(a);

      cout<<" & ";

      dv(b);

      cout<<" = ";

      dv(c);

      return 0;

      }

      Ниже даны тесты для проверки задач программы.

      Тест 1

      a=10 b=8

      Результат

      1010 | 1000 =1010

      1010 & 1000 =1000

      Тест 2

      a=11 b=3

      Результат

      1011 | 11 = 1011

      1011 & 11 = 11

      Сдвиг влево

      Пример:

      10 << 2 = 1000

      Двоичная запись числа передвинется на 2 знака влево, на их место проставятся 0. Необходимо быть внимательными, так как в типе int и т.д. хранится ограниченное количество бит.

      Сдвиг вправо

      Пример:

      100 >> 2 = 1

      Двоичная запись числа передвинется на 2 знака вправо. 2 бита исчезнут.

      Одноместное поразрядное

Скачать книгу