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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2009, 16:06   #1
Equalizer
 
Аватар для Equalizer
 
Регистрация: 07.09.2009
Сообщений: 7
Смущение Как числа в двоичном виде вывести в столбик по 4 числа?

Всем привет!
Помогите пжлст вывести результат в столбики по 8 числ (4 столбца).

Задание:

Написать программу на языке C++, читающую со стандартного ввода 4 десятичных числа x, y, m,n. Все смещения будут указываться начиная с младшего бита, начиная с 0.
Из числа y n бит начиная с m-го поместить в соответствующие биты в
x, и установить в ‘1’ значения 6 старших бит в y.
Программа должна вывести все исходные данные в десятичном виде,
исходные и полученные значения x, y в двоичном виде в столбик, причём
справа от числа должно быть выведено имя соответствующей переменной.
В программе не должно быть более одного цикла. Не следует использовать
классы и библиотеки для работы с битовыми объектами. Рекомендуется не
изменять исходные переменные, следует определить выходные и временные
переменные. Программа должна быть корректной вне зависимости от количества бит в целом числе на данной архитектуре.

Код:
#include <iostream>

using namespace std;
void print_bit (unsigned int a_x);
int main()
{
unsigned int x,y,a1,a2,a3,a4,a5,y1,y2,x1,x2,t2,a6;
int m, n, k=6, t = sizeof(int)*8;
    cout<<"Vvedite M"<<endl;
    cin>>m;
    cout<<"Vvedite N"<<endl;
    cin>>n;
    cout<<"Vvedite X"<<endl;
    cin>>x;
    cout<<"Vvedite Y"<<endl;
    cin>>y;

print_bit (x);
cout <<"-----X"<< endl;
print_bit (y);
cout <<"-----Y"<< endl;
    a1=~0;
    a2=a1<<n;
    a3=~a2;
    a4=a3<<m;
    y1=y&a4;
    a5=~a4;
    x1=x&a5;
    x2=x1|y1;
print_bit (x2);
    cout <<"-----X2"<< endl;
    a6=a1<<(t-k);
    y2=y|a6;
print_bit (y2);
cout <<"-----Y2"<< endl;
return 0;
}
void print_bit (unsigned int a_x)
{
int i , s=sizeof(int)*8;
unsigned int b=1;
b=b<<(s-1);
for(i=0; i<s; i++)
{
    if((a_x&b)>0)
    cout<<'1';
    else cout<<'0';
    b=b>>1;
}
}

Последний раз редактировалось Equalizer; 24.09.2009 в 20:32.
Equalizer вне форума Ответить с цитированием
Старый 24.09.2009, 16:32   #2
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

a3=~a2; - это что делает?
Dimarik вне форума Ответить с цитированием
Старый 24.09.2009, 16:33   #3
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

a4=a3<<m;
y1=y&a4; и что эти делают?
Dimarik вне форума Ответить с цитированием
Старый 24.09.2009, 19:03   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Как вариант:
Код:
void print_bit_colls(unsigned int a_x, unsigned int a_y, unsigned int a_x2, unsigned int a_y2)
{
	int size = sizeof(int)*8;
	int b = 1;

	std::cout << " X | Y | X2 | Y2 \n";
	
	for(int i = 0; i < size; i++) {
		std::cout << ' ' << (bool)(a_x & b) << ' ' << '|';
		std::cout << ' ' << (bool)(a_y & b) << ' ' << '|';
		std::cout << ' ' << (bool)(a_x2 & b) << ' ' << ' ' << '|';
		std::cout << ' ' << (bool)(a_y2 & b) << '\n';

		b <<= 1;
	}
	

	return;
}
netrino вне форума Ответить с цитированием
Старый 24.09.2009, 19:27   #5
Equalizer
 
Аватар для Equalizer
 
Регистрация: 07.09.2009
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Dimarik Посмотреть сообщение
a3=~a2; - это что делает?
Инверсию а2 и записывает в а3
Equalizer вне форума Ответить с цитированием
Старый 24.09.2009, 20:07   #6
Equalizer
 
Аватар для Equalizer
 
Регистрация: 07.09.2009
Сообщений: 7
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Как вариант:
Код:
void print_bit_colls(unsigned int a_x, unsigned int a_y, unsigned int a_x2, unsigned int a_y2)
{
	int size = sizeof(int)*8;
	int b = 1;

	std::cout << " X | Y | X2 | Y2 \n";
	
	for(int i = 0; i < size; i++) {
		std::cout << ' ' << (bool)(a_x & b) << ' ' << '|';
		std::cout << ' ' << (bool)(a_y & b) << ' ' << '|';
		std::cout << ' ' << (bool)(a_x2 & b) << ' ' << ' ' << '|';
		std::cout << ' ' << (bool)(a_y2 & b) << '\n';

		b <<= 1;
	}
	

	return;
}
Спасиб... НО у меня почемуто ругается компелятор когда вставляю с заменой этот кусочек(
пишет expected initializer before "int"
типо ожидаемый initializer прежде "int"

если не трудно попробуй вставить у себя эту часть и выкень целиком.
и помойму тут еще return не нужен...
Equalizer вне форума Ответить с цитированием
Старый 24.09.2009, 20:11   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
#include <iostream>

using namespace std;
void print_bit_colls(unsigned int a_x, unsigned int a_y, unsigned int a_x2, unsigned int a_y2);
int main()
{
unsigned int x,y,a1,a2,a3,a4,a5,y1,y2,x1,x2,t2,a6;
int m, n, k=6, t = sizeof(int)*8;
    cout<<"Vvedite M"<<endl;
    cin>>m;
    cout<<"Vvedite N"<<endl;
    cin>>n;
    cout<<"Vvedite X"<<endl;
    cin>>x;
    cout<<"Vvedite Y"<<endl;
    cin>>y;

    a1=~0;
    a2=a1<<n;
    a3=~a2;
    a4=a3<<m;
    y1=y&a4;
    a5=~a4;
    x1=x&a5;
    x2=x1|y1;
    a6=a1<<(t-k);
    y2=y|a6;

	print_bit_colls(x, y, x2, y2);
return 0;
}

void print_bit_colls(unsigned int a_x, unsigned int a_y, unsigned int a_x2, unsigned int a_y2)
{
	int size = sizeof(int)*8;
	int b = 1;

	cout << " X | Y | X2 | Y2 \n";
	
	for(int i = 0; i < size; i++) {
		cout << ' ' << (bool)(a_x & b) << ' ' << '|';
		cout << ' ' << (bool)(a_y & b) << ' ' << '|';
		cout << ' ' << (bool)(a_x2 & b) << ' ' << ' ' << '|';
		cout << ' ' << (bool)(a_y2 & b) << '\n';

		b <<= 1;
	}
	

	return;
}
Вот )
netrino вне форума Ответить с цитированием
Старый 24.09.2009, 20:38   #8
Equalizer
 
Аватар для Equalizer
 
Регистрация: 07.09.2009
Сообщений: 7
По умолчанию

Это мой ответ:

Vvedite M
0
Vvedite N
8
Vvedite X
3566
Vvedite Y
9815
00000000000000000000110111101110-----X
00000000000000000010011001010111-----Y
00000000000000000000110101010111-----X2
11111100000000000010011001010111-----Y2

А нужно было что б было

Vvedite M
0
Vvedite N
8
Vvedite X
3566
Vvedite Y
9815
00000000 00000000 00001101 11101110-----X
00000000 00000000 00100110 01010111-----Y
00000000 00000000 00001101 01010111-----X2
11111100 00000000 00100110 01010111-----Y2

Только как так сделать не понятно....
а у тебя получается
||
||
\/
Vvedite M
0
Vvedite N
8
Vvedite X
56356
Vvedite Y
73456
X | Y | X2 | Y2
0 | 0 | 0 | 0
0 | 0 | 0 | 0
1 | 0 | 0 | 0
0 | 0 | 0 | 0
0 | 1 | 1 | 1
1 | 1 | 1 | 1
0 | 1 | 1 | 1
0 | 1 | 1 | 1
0 | 0 | 0 | 0
0 | 1 | 0 | 1
1 | 1 | 1 | 1
1 | 1 | 1 | 1
1 | 1 | 1 | 1
0 | 0 | 0 | 0
1 | 0 | 1 | 0
1 | 0 | 1 | 0
0 | 1 | 0 | 1
0 | 0 | 0 | 0
0 | 0 | 0 | 0
0 | 0 | 0 | 0
0 | 0 | 0 | 0
0 | 0 | 0 | 0
0 | 0 | 0 | 0
0 | 0 | 0 | 0
0 | 0 | 0 | 0
0 | 0 | 0 | 0
0 | 0 | 0 | 1
0 | 0 | 0 | 1
0 | 0 | 0 | 1
0 | 0 | 0 | 1
0 | 0 | 0 | 1
0 | 0 | 0 | 1

Ну в принципе тож не плохо но хотелось бы что б было как я написал ответ)
Заранее спс))!
Equalizer вне форума Ответить с цитированием
Старый 24.09.2009, 20:45   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Аааа)) Я неправильно Вас понял)
Код:
void print_bit (unsigned int a_x)
{
int i , s=sizeof(int)*8;
unsigned int b=1;
b=b<<(s-1);
for(i=0; i<s; i++)
{
	if( !(i % 8) && i )
		std::cout << ' ';
    if((a_x&b)>0)
    cout<<'1';
    else cout<<'0';
    b=b>>1;
}
}

Последний раз редактировалось netrino; 24.09.2009 в 20:59.
netrino вне форума Ответить с цитированием
Старый 24.09.2009, 22:26   #10
Equalizer
 
Аватар для Equalizer
 
Регистрация: 07.09.2009
Сообщений: 7
По умолчанию

Спасибо огромное!!! Теперь буду знать)))
Equalizer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести из диапозона не хватающие числа... boy24 Microsoft Office Excel 7 08.06.2009 06:08
В каком виде обрабатывать двоичные числа? x8i Общие вопросы C/C++ 2 17.05.2009 15:12
Различные представление числа N в виде сумм Дамир Помощь студентам 4 07.12.2008 21:57
Си наити факториал большого числа и вывести в виде массива Владимир #include Помощь студентам 2 28.10.2008 13:13
Как вывести все целые степени числа? riorio07 Паскаль, Turbo Pascal, PascalABC.NET 1 20.05.2008 11:47