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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2013, 21:08   #1
marina12
Пользователь
 
Регистрация: 13.02.2013
Сообщений: 28
По умолчанию С++ Операция побитового сдвига

Задача состоит в том,что нужно введенное число (unsigned char) перевести в двоичную, а затем проверить биты полученного числа (например, если в 7 бите двоичного числа 0, то выводить надпись "ноль", а если 1, то выводить надпись "1" и т.д.). Начало программы я написала
Код:
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>

int c=0;
void dvoich(int x1)
{
	int i,b;
	for(i=0;x1>0;i++)
	{
		b=x1%2;
		x1=(x1-b)/2;
		c+=b*pow(10.,i);
	}
	printf("\n\n Dvoichnoe:%d ",c);
}
void main()

{
	unsigned char a;
	printf("\n Vvedite desiatichnoe chislo:");
	scanf("\n%c",&a);
	dvoich(a);
}
программа переводит число из 10 в 2 СС, а как дальше?Нужно воспользоваться побитовым сдвигом?Правильно ли будет записать с=с>>7, а дальше проверять переменную с?
marina12 вне форума Ответить с цитированием
Старый 14.02.2013, 21:32   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Извините за может быть не уместный вопрос. Вы в функцию dvoich передаете символьную переменную, а в параметрах переменная x1 типа int. У Вас программа действительно корректно работает?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 16.02.2013, 04:21   #3
rlib
Форумчанин
 
Аватар для rlib
 
Регистрация: 22.05.2012
Сообщений: 352
По умолчанию

Код:
#include <iostream>
#include <string>
#include <sstream>

using std::stringstream;
using std::string;
using std::cout;
string convert(int x) {
	const int BitsInByte = 8;
	const int BitsInInt = BitsInByte * sizeof(int);
	stringstream ss;
	string s;
	for (int i=BitsInInt-1; i>-1; --i) 
		ss << (x >> i & 1); 			
	ss >> s;
	return s;
}

int main() {
	cout << convert(3) << std::endl;
	return 0;
}
rlib вне форума Ответить с цитированием
Старый 16.02.2013, 10:36   #4
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

http://programmersforum.ru/showthread.php?t=227773
http://programmersforum.ru/showthread.php?t=227870
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операция циклического сдвига Ghost of Night Общие вопросы Delphi 7 13.07.2011 00:12
Тело сдвига Abur Фриланс 2 08.01.2011 19:11
Cтроки, команды сдвига dima0268 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 16.12.2009 12:44
операции сдвига ssvd Общие вопросы C/C++ 2 04.11.2009 08:13
Операция сдвига? SkyDreamer Общие вопросы C/C++ 3 10.10.2007 08:20