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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2012, 10:54   #1
leftonedead
Новичок
Джуниор
 
Регистрация: 16.12.2012
Сообщений: 2
По умолчанию (Visual Studio С++) циклический сдвиг, преобразования с числами в двоичном коде.

Написать программу, которая получает случайное целое типа int, выводит его двоичное представление на экран, выполняет преобразование (см. ниже), затем выводит на экран двоичное представление результата преобразования.

Назовем сверткой байта порядка N операцию циклического сдвига старшей тетрады на N битов вправо, а младшей тетрады на N битов влево. Выполнить свертку всех байтов на случайное число из диапазона 0..3.

Программу нужно написать без использования массивов! Желательно с некоторыми пояснениями. Заранее благодарю.
leftonedead вне форума Ответить с цитированием
Старый 16.12.2012, 12:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так что-ли?:
Код:
	int y=0,x=rand(),n=rand()%3;
	__asm{
		mov eax,[x]
		mov ecx,[n]
		a:
			ror eax,1
		loop a
		mov [y],eax
	}
	printf("%d\t%d",x,y);
	getchar();
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.12.2012, 19:10   #3
leftonedead
Новичок
Джуниор
 
Регистрация: 16.12.2012
Сообщений: 2
По умолчанию

Уважаемый Stilet, честно говоря, не знаю некоторых операторов, написанных в программе, но если я все правильно понял, то я вообще не вижу, где вы переводите число в двоичный код. я попробывал запустить программу и получилось не то, что надо. Попытаюсь пояснить условие. Допустим нам выпало случайно число 9726(взял от балды). Нам нужно перевести его в двоичную систему счисления, получится 0010 0101 1111 1110. В одном байте - 8 бит. у нас получилось число из 2 байт. 4 первых бита в байте - это младшая тетрада, 4 последних бита в байте - старшая тетрада. вот рассмотрим первый байт нашего числа 9726 - 0010 0101. выполняем сдвиг младшей тетрады влево на n=2(например), получится 1000, а теперь старшей вправо получится 0101. в итоге 0010 0101 --> 1000 0101. И так нужно с каждым байтом в числе. Надеюсь, что все понятно объяснил. Сам просел именно на этом сдвиге, если бы можно было использовать массив - все бы было ок и я сам бы решил, но увы.. Выручайте ребят.

Последний раз редактировалось leftonedead; 16.12.2012 в 21:40.
leftonedead вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
циклический сдвиг browserpro Помощь студентам 0 08.12.2011 20:48
циклический сдвиг zvir Помощь студентам 4 02.12.2011 09:41
циклический сдвиг revaldo666 Общие вопросы C/C++ 4 29.03.2011 17:34
Циклический сдвиг в С rand8154 Общие вопросы C/C++ 1 14.11.2009 01:49
Циклический сдвиг Mish92(21-09) Помощь студентам 0 07.11.2009 21:59