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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2012, 05:35   #1
Teemo
Новичок
Джуниор
 
Регистрация: 08.12.2012
Сообщений: 2
По умолчанию Работа с битами чисел (С++)

Здравствуйте, в общем столкнулся с проблемой при работе с битами. Суть задачи состоит в том, что нужно заменить n правых битов числа X, на n левых битов числа У.

Вот сам код программы:
Код:
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <iostream>

using namespace std;

void print_bit(unsigned long);
unsigned long zamena(unsigned long,unsigned long,int);

int _tmain(int argc, _TCHAR* argv[])
{
        setlocale(LC_ALL,"RUS");
	int n;
	unsigned long x,y;
	cout<<"Введите х ";
	cin>>x;
	cout<<"Введите у ";
	cin>>y;
	cout<<"Введите n ";
	cin>>n;
	print_bit(x);
	print_bit(y);
	x=zamena(x,y,n);
	cout<<'\n';
	print_bit(x);
	getch();
	return 0;
}
unsigned long zamena(unsigned long x,unsigned long y,int n)
{
	int t=sizeof(unsigned long)*8;//получаем число битов,у нас их 32
	if(n>t)
	{
		cout<<"Замена не возможна \n";
		return 0;
	}
	y=(x>>(t-n))<<(t-n);
	x=(x<<n)>>n;
	x=x|y;
	return x;
}
void print_bit(unsigned long x)
{
	unsigned long h=1L;// 
	int t=sizeof(unsigned long)*8;
	int i;
	h<<=t-1;
	for(i=1;i<=t;i++)
	{
		cout<<((x&h)!=0)<<(i%8?"":" ");
		x<<=1;
	}
	cout<<'\n';
}
Метод который нам говорили, заключается в замене "ненужных" битов нулями, т.е. те биты которые не заменяем обнуляем и тоже самое делаем с другим числом и потом побитово складываем, тем самым реализуется замена битов.

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


Всем заранее СПАСИБО, кто откликнулся.

Последний раз редактировалось Stilet; 08.12.2012 в 10:36.
Teemo вне форума Ответить с цитированием
Старый 08.12.2012, 09:23   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,321
По умолчанию

Код:
y = y>>(t - n);
x >>= n;
x <<= n;
x = x|y;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.12.2012, 19:28   #3
Teemo
Новичок
Джуниор
 
Регистрация: 08.12.2012
Сообщений: 2
По умолчанию

Спасибо большое))Но думаю ещё поразбирать что то другое, чтобы не было вопросов по этой теме)
Teemo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с битами (С++) d1mka_ Помощь студентам 1 27.03.2012 21:24
Работа с битами codermoder Общие вопросы C/C++ 2 18.11.2011 06:25
работа с битами Henpyxa Общие вопросы C/C++ 5 23.05.2010 12:09
Работа с битами. Masip Общие вопросы Delphi 2 13.04.2010 13:03
Работа с битами viktory Помощь студентам 8 02.10.2009 18:33