Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
Verzhina
1 / 1 / 0
Регистрация: 09.04.2012
Сообщений: 90
#1

эвм-умножение со сдвигом влево на c++ - C++

19.04.2012, 01:18. Просмотров 2750. Ответов 21
Метки нет (Все метки)

задали лабораторную,нужно написать программу на c++ которая производит умножение со сдвигом влево.позно вспомнила,не успеваю.подскажите как перевести из десяти4ной системы в двоичную чтоб потом удобно было использовать сдвиг и побитовое сравнение.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Verzhina
1 / 1 / 0
Регистрация: 09.04.2012
Сообщений: 90
19.04.2012, 21:13  [ТС]     эвм-умножение со сдвигом влево на c++ #16
RGA и RGB это регистры с цифрами которые надо умножить, а RGP ето чтото вроде результата (часное произведение).циклов столько,сколько разрядов множителя.
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,450
Записей в блоге: 17
19.04.2012, 23:13     эвм-умножение со сдвигом влево на c++ #17
Так и не разобрался с примером, так и не понял например что делается с регистром B и почему он с каждым шагом меняется.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <bitset>
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a=13,b=11,p=0;
bitset<4> B(b);
 
cout<<"--RgP------RgB----"<<endl;
for(int i=0;i<4;i++)
 {
 cout<<bitset<8>(p)<<"   "<<B[i]<<" shift"<<endl;
 if(B[i])
    {
    p+=a<<i;
      cout<<bitset<8>(p)<<"   "<<B[i]<<" add"<<endl;
    }
 else cout<<bitset<8>(p)<<"   "<<B[i]<<" no add"<<endl;
 cout<<"-------------------"<<endl;
 }
system("pause");
return 0;
}
//---------------------------------------------------------------------------
kazak
19.04.2012, 23:39
  #18

Не по теме:

Я так понимаю это обычное умножение в столбик, только в двоичном виде.

Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,450
Записей в блоге: 17
19.04.2012, 23:53     эвм-умножение со сдвигом влево на c++ #19
Оно самое!
Там под примером написано: "Умножение методом сдвига влево", только пример непонятно как оформлен
Verzhina
1 / 1 / 0
Регистрация: 09.04.2012
Сообщений: 90
20.04.2012, 01:32  [ТС]     эвм-умножение со сдвигом влево на c++ #20
каждый раунд начинается со сдвига B и P влево на 1 разряд,проверяется подчеркнутый разряд в предыдущем раунде если там 1 то A прибавляется к P,если 0 то после сдвига ни4его не меняется.и так столько раз сколько разрядов в умножаемых цифрах,по этому мне надо чтоб переводя из десятичной в двоичную лишних нулей небыло.в итоге получаем правельный ответ 11*13=143.


надеюсь смогла внятно обьяснить,я привыкла ко всей этой терминалогии на армянском))
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,450
Записей в блоге: 17
20.04.2012, 01:55     эвм-умножение со сдвигом влево на c++ #21
Дело в том что производить сдвиг в B не зачем достаточно пробежатся по его битам.
В моем примере я сдвигал A и результат сдвига прибовлял к P
Кстати неуверен что можно использовать bitset...а без него как-то все усложняется
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2012, 02:37     эвм-умножение со сдвигом влево на c++
Еще ссылки по теме:
C++ Удаление элемента массива сдвигом последующих
Удалить заданную строку и столбец матрицы со сдвигом C++
Вставка в массив заданного числа на k-е место со сдвигом C++
Ребят, нужно написать программу шифровки циклическим сдвигом C++
C++ Является ли первая строка циклическим сдвигом второй строки

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
21.04.2012, 02:37     эвм-умножение со сдвигом влево на c++ #22
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream.h>
 
int main(int argc, char* argv[])
{
   int RGP = 0;
   short int RGB = 13, RGA = 11;
   size_t sz = sizeof(short int)*8 - 1;
 
   for (int i = sz; i >= 0; i--)
   {
      RGP <<= 1;
      if (RGB&(1<<i))
         RGP += RGA;
   }
   cout << RGA << " * " << RGB << " = " << RGP << endl;
   system("pause");
   return 0;
}
Yandex
Объявления
21.04.2012, 02:37     эвм-умножение со сдвигом влево на c++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru