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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 27.05.2008, 15:00   #1
drossel
 
Регистрация: 01.03.2008
Сообщений: 7
По умолчанию Помогите с задачей

Добрый день.Помогите сделать задачу.
Вот такая задача: ВВодим число , старшие три бита интерпретируем, как некое число n , все остальные разряды сдвигаем циклически вправо на n разрядов.Вывод в 16-ричном виде.
Тоесть вводим 11110000000.....(32 разряда),
выводим 1110000000100000(32 разряда).
Предворительно набросал, но чё-то нето:
Код:
#include <stdio.h>

int main()
{
unsigned long x, n, i, bit;

scanf("%d", &x);
n = (x & 0xE0000000) >> 29;
x &= ~0xE0000000;

for(i = 0; i < n; i++){
bit = x & 1;
x >> 1;
x |= (bit << 32);
}
printf("0x%08X\n", x);
return 0;
}
drossel вне форума
Старый 27.05.2008, 15:22   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

http://programmersforum.ru/showthread.php?t=15049
И обратите внимание, что там я исправил пару опечаток.
B_N вне форума
Старый 27.05.2008, 18:24   #3
drossel
 
Регистрация: 01.03.2008
Сообщений: 7
По умолчанию

B_N
Дело в том, что прога не выводит первые - те, самые старшие три разряда, перед преобразованным числом: т.е. вводим 11110000....(32 разряда), выводим первые три 111 затем 0 0000 0010 00...(также 32) или в 16-ричном коде E 0 2 000000.....

Т.е. первые три оставляем, а т.к 111 это 7 ,то на 7 и сдвигаем оставшиеся разряды.

Последний раз редактировалось drossel; 27.05.2008 в 19:58.
drossel вне форума
Старый 27.05.2008, 18:41   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Так Вам их на место нужно поставить что ли? Значит сделайте AND результата с 0x1FFFFFFF, AND аргумента с 0xE0000000 и потом сделайте их OR.

Последний раз редактировалось B_N; 27.05.2008 в 18:43. Причина: Сначала ерунду какую-то написал.
B_N вне форума
Старый 27.05.2008, 19:54   #5
drossel
 
Регистрация: 01.03.2008
Сообщений: 7
По умолчанию

B_N
А Вы немогли бы прямо в коде исправить, а то что-то немогу сообразить.
drossel вне форума
Старый 27.05.2008, 20:34   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Код:
#include <stdio.h>

int main()
{
	unsigned long x, n, i, bit;

	scanf("%x", &x);
	n = x >> 29;
	x &= ~0xE0000000;

	for(i = 0; i < n; i++){
		bit = x & 1;
		x >>= 1;
		x |= (bit << 28);
	}
	x |= n << 29;

	printf("0x%08X\n", x);	
	return 0;
}
B_N вне форума
Старый 27.05.2008, 20:48   #7
drossel
 
Регистрация: 01.03.2008
Сообщений: 7
По умолчанию

B_N
Чегото не то выдаёт.
drossel вне форума
Старый 27.05.2008, 21:08   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Чего это не то выдаёт?....

Вводим
F0008401 (11110000000000001000010000000001)
Выводит:
E0600108 (11100000011000000000000100001000)
B_N вне форума
Старый 01.06.2008, 21:38   #9
drossell
Пользователь
 
Регистрация: 01.06.2008
Сообщений: 10
По умолчанию

В среду Винда упала, пока всё небходимое поставил......
Но сейчас не об этом.

B_N

Всёравно не так работает, или не так выводит:

B_N

Проверь сам: введи 11110000000000000000000000000000 (32 бита)
должно вывести Е02000
drossell вне форума
Старый 01.06.2008, 21:45   #10
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

НИКТО ТЕБЕ ТУТ НИЧЕГО НЕ ДОЛЖЕН.
Я смотрю ты наглеть начинаешь. Пока не схватил предупреждение создавай тему во фрилансе. Если нет мозгов, пораскинь кошельком.
merax вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с задачей. terminadoor Помощь студентам 4 22.07.2008 18:38
Помогите с задачей.. vit_al Паскаль, Turbo Pascal, PascalABC.NET 3 24.04.2008 13:48
Помогите с задачей в С++ vovchara Помощь студентам 2 22.04.2008 22:49
Помогите с задачей Лёха Паскаль, Turbo Pascal, PascalABC.NET 7 08.02.2008 20:08
Помогите с задачей bel_ka Общие вопросы C/C++ 13 26.12.2007 19:23