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

Разворот порядка битов в байте - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.60
RESTY
5 / 5 / 0
Регистрация: 30.05.2012
Сообщений: 89
08.09.2012, 15:13     Разворот порядка битов в байте #1
С клавиатуры вводится целое число размером в 1 байт (unsigned char = 0..255). Необходимо развернуть порядок битов наоборот в этом числе и вывести полученное число на экран в следующей строке.
Входные данные
Целое число размером в 1 байт.
Выходные данные
Целое число размером в 1 байт с развернутым порядком битов.
Пример входных данных
1
Пример выходных данных
128
(буду очень благодарен тому кто поможет сделал перевод в биты но допереть как в 10 систему перевести не пойму)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2012, 15:13     Разворот порядка битов в байте
Посмотрите здесь:

C++ Разворот текста
C++ Боковой разворот матрицы
C++ Из двоичной в десятичную+разворот
C++ Разворот матрицы на 90 градусов
C++ Разворот порядка битов в байте
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
08.09.2012, 15:24     Разворот порядка битов в байте #2
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main () {
    unsigned char n = 23, res = 0; // inital number
    for (int i = 0; i < 8; res = res | ( (n >> i) & 1 ? 1 << (7 - i) : 0), ++i);
    std::cout << int(res) << std::endl;
}
Зачем перевод в разные системы счисления?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.09.2012, 15:31     Разворот порядка битов в байте #3
А зачем тут циклический сдвиг? Нужно порядок байт ревертнуть.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.09.2012, 15:32     Разворот порядка битов в байте #4
А нужно непременно в десятичную систему переводить? Не проще ли битовые операции использовать?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
08.09.2012, 15:33     Разворот порядка битов в байте #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
typedef unsigned char uchar;
 
uchar reverse(uchar input)
{
   uchar output = 0;
   const int uchar_size = 8; 
  
   for(int i = 0; i!=uchar_size; ++i)
   {
      output |= ((input>>i)&1)<<(uchar_size-1-i);  
   }
   return output;
}         
 
int main()
{
   uchar value = 1;
   std::cout << (int)reverse(value) << std::endl;
    
   return 0;
}
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
08.09.2012, 15:35     Разворот порядка битов в байте #6
Цитата Сообщение от Kastaneda Посмотреть сообщение
А зачем тут циклический сдвиг? Нужно порядок байт ревертнуть.
Смотрим внимательно:
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main () {
    unsigned char n = 23, res = 0; // inital number
    for (int i = 0; i < 8; res = res | ( (n >> i) & 1 ? 1 << (7 - i) : 0), ++i);
    std::cout << int(res) << std::endl;
}
Kastaneda
08.09.2012, 15:39
  #7

Не по теме:

Цитата Сообщение от outoftime Посмотреть сообщение
Смотрим внимательно:
ну как бы этот код отличается от кода во втором посте.

nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
08.09.2012, 15:47     Разворот порядка битов в байте #8
RESTY,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
unsigned char ReverseBits(unsigned char number) {
   number = (number & 0x55) << 1 | (number & 0xAA) >> 1;
   number = (number & 0x33) << 2 | (number & 0xCC) >> 2;
   number = (number & 0x0F) << 4 | (number & 0xF0) >> 4;
   
   return number;
}
 
int main() {
   unsigned char number = 1;
   std::cout << static_cast <int>(ReverseBits(number)) << std::endl;
}
http://liveworkspace.org/code/0ed5f6...703ec4a04f0a7d

Генри Уоррена почитайте "Алгоритмические трюки для программистов"
RESTY
5 / 5 / 0
Регистрация: 30.05.2012
Сообщений: 89
08.09.2012, 15:52  [ТС]     Разворот порядка битов в байте #9
спасибо то что нужно)
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
08.09.2012, 16:05     Разворот порядка битов в байте #10
nameless, у меня короче вышло
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2012, 16:08     Разворот порядка битов в байте
Еще ссылки по теме:

C++ изменения порядка битов в 2-ч байтовом целом
Зеркальное отображение битов в байте C++
Циклический сдвиг битов в байте C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
08.09.2012, 16:08     Разворот порядка битов в байте #11
outoftime, короткий код не значит быстрый и оптимальный.
Yandex
Объявления
08.09.2012, 16:08     Разворот порядка битов в байте
Ответ Создать тему
Опции темы

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