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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2014, 13:27   #1
delaimo
 
Регистрация: 24.05.2014
Сообщений: 8
По умолчанию Битовые операции

Господа, помогите пожалуйста с задачкой. В битовых операциях ничего не понимаю...
Итак, условие: в двухбайтном числе младший байт заменить перевернутым старшим
delaimo вне форума Ответить с цитированием
Старый 19.06.2014, 14:20   #2
casekey
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 95
По умолчанию

Код:
  short num = 0xBCAB;
  std::bitset<16> bs(num);
  std::cout << bs << "\n";
  size_t init = 7;
  for (size_t i = 8; i<16; ++i, --init)
    bs.set(init, bs.at(i));
  std::cout << bs << "\n";
Не проверял
casekey вне форума Ответить с цитированием
Старый 20.06.2014, 22:40   #3
VladimirVB
Форумчанин
 
Аватар для VladimirVB
 
Регистрация: 12.10.2008
Сообщений: 131
Стрелка

Код:
/*
	Решением в данном случае будет использование инструкций сдвига и
	ротации. Например, используя SHR ,мы можем «вытолкнуть» один бит в 
	CF(флаг переноса) и, используя RCL, переместить этот бит в младший 
	бит операнда. Повторив это действие 8 раз, мы решим поставленную
	задачу.	
*/

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
	/*
		Число 0x15, т.е. 00010101b из ah перемещаем в al.
		После реверсирования получаем его "зеркальное отображение":
		10101000b, т.е. 0xA8
	*/
	_asm
	{
		mov ax, 0x15ff;
		mov al, ah;

		mov cx, 8;	// наш счетчик CX = 8
theloop:
		shr al, 1;	// сдвигаем AL на 1 бит вправо, младший бит - в CF
		rcl ah, 1;	// сдвигаем AH на 1 бит влево, заменяем младший бит на CF
		loop theloop; // повторяем 8 раз

	}

	return 0;
}

Последний раз редактировалось VladimirVB; 20.06.2014 в 22:48.
VladimirVB вне форума Ответить с цитированием
Старый 21.06.2014, 07:13   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Да зачем так сложно-то?

Код:
#include <stdlib>

int main()
{
  unsigned short x = 0xf000;
  x = _rotl(x,8);// Циклически сдвигаем число влево на 8 бит, получаем 0x00f0;
  x^0x00ff;// Делаем исключающее ИЛИ (инвертирование байта), получаем 0x000f;
}
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 21.06.2014 в 10:06.
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.06.2014, 09:59   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Раз уж писать на ассемблере, тогда хоть писать как следует: http://graphics.stanford.edu/~seande...ReverseObvious
waleri вне форума Ответить с цитированием
Старый 21.06.2014, 10:05   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Раз уж писать на ассемблере, тогда хоть писать как следует: http://graphics.stanford.edu/~seande...ReverseObvious
Какой Ассемблер? Раздел - "Общие вопросы C/C++".
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Битовые операции TikTak93 Помощь студентам 1 12.12.2013 17:50
Битовые операции С++ GXDoblin Помощь студентам 5 13.06.2011 12:44
Битовые операции C++ MarchZM Помощь студентам 0 30.05.2011 18:18
Битовые операции ("")(Э_Є)("") Общие вопросы C/C++ 4 03.07.2009 19:15
Битовые операции DrAlexx2121 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 14.06.2008 22:26