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

Вывод двоичного числа и сброска битов - C++

Восстановить пароль Регистрация
 
1_vlad
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 49
21.09.2013, 20:29     Вывод двоичного числа и сброска битов #1
Примерно такого типа задачаНаписать программу на языке C++, читающую со стандартного ввода 4 десятичных числа x, y,m, n. Все смещения будут указываться начиная с младшего бита,начиная с 0. Если в числе x установлен бит n и установлен бит m, то в числе y сбросить биты 3 и самый старший бит.
Программа должна вывести все исходные данные в десятичном виде, исходные и полученные значения x, y в двоичном виде в столбик, причём справа от числа должно быть выведено имя соответствующей переменной.

Код
#include <iostream>
//#include <cstdlib>
//#include <stdio.h>
using namespace std;
const int N = 8;

int print (int ar []) {
for (int i = 0; i<N; i++) {
cout<<ar [i];
}
cout<<endl;
return 0;
}
int printDecAsBin(int a, int* pdec) {

while (a > 0) {
for (int i = 7; i>=0; i--) {
int b = a % 2;
a /= 2;
pdec [i] = b;
}
	}
return 0;
}
 
int main()
{
	int dec [N] = {0};
	int* pdec = dec;
    setlocale(LC_ALL, "rus");
	int x,y;
	int n,m;
	
	int z=sizeof(y)-1;

	cout<<"Ведите данные\n";
    cout<<"x=";cin>>x;
    cout<<"y=";cin>>y;
    cout<<"m=";cin>>m;
    cout<<"n=";cin>>n;
	
	//system("cls");
    cout<<"Исходные данные в десятичном виде:\n"<<x<<" - x\n"<<y<<" - y\n"<<m<<" - m\n"<<n<<" - n\n";
	cout<<"Исходные значения x, y в двоичном виде:"<<endl;
	printDecAsBin(x, pdec);
	printf("%s - x\n",print(pdec)); 
	printDecAsBin(y, pdec);
	printf("%s - y\n",print(pdec)); 

      
    system("pause");
	return 0;
	}
У меня начало вот такое получается. То есть перевод совершил, но далее запутался как сбрасывать биты. Что посоветуете?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
21.09.2013, 22:37     Вывод двоичного числа и сброска битов #2
Цитата Сообщение от 1_vlad Посмотреть сообщение
Если в числе x установлен бит n и установлен бит m, то в числе y сбросить биты 3 и самый старший бит.
Как то так:
C++
1
2
3
4
5
unsigned int x, y;
// ...
if ((x & (1u << n)) && (x & (1u << m))) {
   y &= ~((1u << 3) | (1u << (sizeof (y) * CHAR_BIT - 1)));
}
1_vlad
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 49
22.09.2013, 16:35  [ТС]     Вывод двоичного числа и сброска битов #3
Цитата Сообщение от gray_fox Посмотреть сообщение
Как то так:
C++
1
2
3
4
5
unsigned int x, y;
// ...
if ((x & (1u << n)) && (x & (1u << m))) {
   y &= ~((1u << 3) | (1u << (sizeof (y) * CHAR_BIT - 1)));
}
что в данном случае является 1u? u - unsigned?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
22.09.2013, 19:04     Вывод двоичного числа и сброска битов #4
Цитата Сообщение от 1_vlad Посмотреть сообщение
u - unsigned?
Да. Use bitwise operators only on unsigned operands
1_vlad
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 49
22.09.2013, 19:10  [ТС]     Вывод двоичного числа и сброска битов #5
gray_fox,

а как это оформить с помощью функции, чтобы ее потом вставить в общий код программы?
Yandex
Объявления
22.09.2013, 19:10     Вывод двоичного числа и сброска битов
Ответ Создать тему
Опции темы

Текущее время: 00:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru