Litvek - онлайн библиотека >> Джесс Либерти >> Программирование: прочее и др. >> Освой самостоятельно С++ за 21 день. >> страница 217
сложить два бита, один из которых установлен, а другой сброшен, бит результата будет равен 1, а бит переноса — 0. Перед вами таблица, которая обобщает эти правила сложения

Левый бит lhs Правый бит rhs Перенос Результат

0 0 0 0

0 1 0 1

1 0 0 1

1 1 1 0

Рассмотрим логику бита переноса. Если оба суммируемых бита (lhs и rhs) равны 0 или хотя бы один из них равен 0, бит переноса будет равен 0. И только если оба бита равны 1, бит переноса будет равен 1. Такая ситуация в точности совпадает с определением побитового оператора И (&).

Если подобным образом рассмотреть логику бита результата, то окажется, что она совпадает с выполнением оператора побитового исключающего ИЛИ (^): если любой из суммируемых битов (но не оба сразу) равен I, бит результата равен 1, в противном случае — 0.

Полученный бит переноса добавляется к следуюшему значимому биту. Это можно реализовать либо итеративным проходом через каждый бит, либо использованием рекурсии.

#include <iostream.h>

unsigned int add( unsigned int lhs, unsigned lnt rhs )

{

   unsigned int result, carry;

   while ( 1 )

   {

      result = lhs ^ rhs;

      carry = lhs & rhs;

      if ( carry == 0 )

         break;

      lhs = carry << 1;

      rhs = result;

   };

   return result;

}

int main()

{

   unsigned long a, b;

   for (;;)

   {

      cout << "Enter two numbers. (0 0 to stop): ";

      cin << a << b:

      if (!a && !b)

         break;

      cout << a << " + " << b << " = " << add(a,b) << endl;

   }

   return 0;

}

В качестве альтернативного варианта эту проблему можно решить с помошью рекурсии:

#include <iostream.h>

unsigned int add( unsigned int lhs, unsigned int rhs )

{

   unsignod int carry = lhs & rhs;

   unsigned int result = lhs * rhs;

   if ( carry )

      return add( result, carry << 1 );

   else

      return result;

}

int main()

{

   unsigned long a, b;

   for (;;)

   {

      cout << "Enter two numbers. (0 0 to stop): **;

      cin << a << b;

      if (!a && !b)

         break;

      cout << a << " + " << b << " = " << add(a,b) << endl;

   }

   return 0;

}

#include <iostream.h>


int main()

{

   cout << "Hello World!\n"

   return 0;

}

(обратно)
int main()

{

   unsigned short x;

   unsigned short у;

   unsigned short z;

   z = x * у;

   return 0;

}


(обратно)
int main()

{

   unsigned short Width;

   unsigned short Length;

   unsigned short Area;

   Area = Width * Length;

   return 0;

}

(обратно) Ниже приводится синтаксис оператора if.

Форма 1:

if (условие)

   выражение;

следующее выражение;

Если условие возвращает true, то выполняется выражение, а за ним и следующее выражение. Если условие возвратит false, то выражение игнорируется, а программа переходит к выполнению следующего выражения.

Помните, что вместо выражения может использоваться целый блок, заключенный в фигурные скобки.

Форма 2:

if (условие)

   выражение1;

else

   выражение2;

следующее выражение;

Если условие возвращает значение true, выполняется выражение1, в противном случае выполняется выражение2. После этого выполняется следующее выражение.

Пример:

if (SomeValue < 10);

   cout << "SomeValue is less than 10";

else

   cout << "SomeValue is not less than 10!";

cout << "Done." << endl;

(обратно)
Litvek: лучшие книги месяца
Топ книга - Хранитель древностей [Юрий Осипович Домбровский] - читаем полностью в LitvekТоп книга - Цель-2. Дело не в везении  [Элияху Моше Голдратт] - читаем полностью в LitvekТоп книга - Эмоциональный интеллект [Дэниел Гоулман] - читаем полностью в LitvekТоп книга - Разозленные [Джейн Энн Кренц] - читаем полностью в LitvekТоп книга - Библиотекарь [Михаил Юрьевич Елизаров] - читаем полностью в LitvekТоп книга - Прощание с иллюзиями [Владимир Владимирович Познер] - читаем полностью в LitvekТоп книга - Воспоминания [Дмитрий Сергеевич Лихачев] - читаем полностью в LitvekТоп книга - Аристономия [Борис Акунин] - читаем полностью в Litvek