Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2008, 18:20   #1
slivochny
 
Регистрация: 20.11.2008
Сообщений: 6
По умолчанию Помогите с циклическим сдвигом

Нужно циклически сдвинуть длинное число N на K разрядов влево. Помогите пожалуйста)

Напишите хотя бы просто циклический сдвиг без остальной ерунды)
slivochny вне форума Ответить с цитированием
Старый 12.12.2008, 19:35   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

может вставкой asm ? к примеру.. на быструю руку

Код:
asm("mov %0,%ecx \n mov %1,%eax \n rol eax \n"::"r"(k), "r"(n));
вроде так, может я ошибаюсь, не часто пишу в сях.
BOBAH13 вне форума Ответить с цитированием
Старый 12.12.2008, 22:27   #3
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

попробуй так

Код:
#include<conio.h>
#include<iostream>
#include<ctime>
#include<cmath>

using namespace std;

int* NumToBit (int n,int *bit) // perevod chisla v bitovoe predstavlenie

{
	int n1=n;
	for(int c=31;c>=0;c--)

	{
		if(n1%2)
		{ bit[c]=1; }
		else
		{ bit[c]=0; }
		n1=n1/2;	
	}

	cout<<"Ischodnoe chislo :\n";
	cout<<n<<" = ";
	for(int i=0;i<32;i++)

	{
		cout<<" "<<bit[i];
	}

	return bit;
}

int BitToNum(int *bit) // perevod v bitov v chislo

{
	int res=0;
	float k=2;

	for(int c=31,i=0;c>=0;c--,i++)

	{
		res+=(bit[c]*pow(k,i));
	}

	return res;
}

int* sdvig (int k,int *bit) // ciklicheskiy sdvig

{
	for(int j=0;j<k;j++)

	{
	   int tmp=bit[0];
	   for(int i=0;i<31;i++)

	   {
	       bit[i]=bit[i+1];
	   }
	   bit[31]=tmp;
       
	   cout<<"\nN << "<<j+1<<" = ";
	   cout.width(3);
	   cout<<BitToNum(bit);
	   cout<<" = ";
	   for(int c=0;c<32;c++)
	   
	   {
	     cout<<" "<<bit[c];
	   }
	  
	}

	return bit;
}
void main()

{
	long n,k;
	cout<<"N : ";
	cin>>n;
	cout<<"\nK : ";
	cin>>k;

	int *bit=new int[32];
	bit=NumToBit(n,bit);

	cout<<"\nSdvig :";
	sdvig(n,k,bit);

	_getch();
}

Последний раз редактировалось counter; 12.12.2008 в 22:48.
counter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц