67 / 42 / 30
Регистрация: 26.03.2019
Сообщений: 269
1

Изменение порядка следования двоичных битов

25.10.2020, 17:02. Показов 2583. Ответов 8

Добрый день. Стоит такая задача: разработать приложение, выполняющее изменение порядка следования двоичных битов в 8 битовом целом числе (байте), заданном в десятичном представлении, на противоположный. Для выполнения задачи необходимо использовать операторы для работы с битами. «Перевернутый» байт выводится в output также в десятичном представлении с завершающим символом перевода строки \n.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2020, 17:02
Ответы с готовыми решениями:

Изменение порядка битов в 2-х байтовом целом
Доброго времени суток!:) Решаю следующую задачу, нужно ввести число, а затем поменять порядок битов...

Изменение порядка следования элементов в массиве через рекурсию
Помогите реализовать через рекурсию. без указателей.. Задача: изменить порядок следования...

Изменение порядка следования битов
Здравствуйте. Имеется последовательность битов, 0 и 1, идут они в случайном порядке. Необходимо...

Изменение порядка битов в символе на противоположный
Пожалуйста помогите написать код на СИ! Задание звучит так : Напишите программу, которая меняет...

8
2414 / 1160 / 429
Регистрация: 08.11.2016
Сообщений: 3,232
26.10.2020, 12:39 2
Лучший ответ Сообщение было отмечено SoBadDay как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
unsigned char bitRevers(unsigned char b)
{
    unsigned char ret = 0;
    for (size_t i = 0; i < 7; ++i, ret <<= 1, b >>= 1)
        ret |= b & 1;
    return ret;
}
 
int main()
{
    unsigned char a;
    
    std::cin >> *(unsigned *)&a;
    
    std::cout << (unsigned)bitRevers(a) << std::endl;
 
    return 0;
}
1
439 / 269 / 171
Регистрация: 06.06.2016
Сообщений: 523
26.10.2020, 23:46 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 #include <iostream>
 #include <bitset>
 
 unsigned char reverse_bits( unsigned char a, int bit = 7 )
 {
       if ( !a )
          return 0;
    return  ( (a & 1) << bit ) + reverse_bits( a >> 1, bit - 1 );
 }
 
 int main()
 {
    unsigned char  a;
    std::cin >> *(unsigned *)&a;
    std::cout << (unsigned )a << " =\t" << std::bitset<8>( a ) << "\n";
    unsigned rev_a = reverse_bits( a );
    std::cout << rev_a << " =\t" << std::bitset<8>( rev_a ) << "\n";
    return 0;
 }
0
67 / 42 / 30
Регистрация: 26.03.2019
Сообщений: 269
27.10.2020, 15:37  [ТС] 4
Annemesski,
При запуске Вашей программы возникает RUN_TIME_ERROR
Код
Run-Time Check Failure #2 - Stack around the variable 'а' was corrupted.
Добавлено через 4 минуты
regio1961,
У Вас также аналогичная проблема
1
439 / 269 / 171
Регистрация: 06.06.2016
Сообщений: 523
27.10.2020, 16:52 5
Это у Вас проблема.
Например, здесь
https://repl.it/languages/cpp
все работает
0
2414 / 1160 / 429
Регистрация: 08.11.2016
Сообщений: 3,232
27.10.2020, 16:57 6
SoBadDay, да, есть такое дело, происходит тут
C++
1
std::cin >> *(unsigned *)&a;
заменить на
C++
1
2
3
unsigned b;
std::cin >> b;
a = b;
Добавлено через 3 минуты
regio1961, не горячитесь, посмотрите сами: мы приводим адрес переменной a размером 1 байт к указателю на unsigned int и разыменовывая его просим на ввод unsigned int размером от 2 до 4 байт --> получаем закономерный stack corrupted around
1
67 / 42 / 30
Регистрация: 26.03.2019
Сообщений: 269
27.10.2020, 17:25  [ТС] 7
Annemesski,
Теперь заработало. Спасибо большое за помощь!
Если несложно, я бы хотел еще один вопрос задать.
C++
1
2
3
4
5
6
7
    unsigned char a;
    unsigned b;
    cin >> b;
    a = b;
    std::cout << (unsigned)bitRevers(a) << std::endl;
 
    return 0;
В качестве эксперимента отправил также на вход a
C++
1
2
3
4
5
    
unsigned char a;
    std::cout << (unsigned)bitRevers(a) << std::endl;
 
    return 0;
Ответ получаю неверный. Интересно, почему преобразование unsigned в unsigned char вызывает другое поведение у программы
0
2414 / 1160 / 429
Регистрация: 08.11.2016
Сообщений: 3,232
27.10.2020, 17:36 8
SoBadDay, не понял в каком варианте не работает преобразование, скиньте полный код...

пока могу только предположить такое
C++
1
2
3
4
unsigned char a;
std::cin >> a;
std::cout << (unsigned)bitRevers(a) << std::endl
    << (unsigned)a << std::endl;
тут при вводе "а" вводится символ, то есть при вводе числа "123", например, в переменную "а" считается код символа '1' (число 49) при этом символы '1' и '2' останутся в потоке, ну а bitRevers соответственно перевернет число 49 и вернет, кажется, 54.
0
67 / 42 / 30
Регистрация: 26.03.2019
Сообщений: 269
27.10.2020, 17:44  [ТС] 9
Цитата Сообщение от Annemesski Посмотреть сообщение
тут при вводе "а" вводится символ, то есть при вводе числа "123", например, в переменную "а" считается код символа '1' (число 49) при этом символы '1' и '2' останутся в потоке, ну а bitRevers соответственно перевернет число 49 и вернет, кажется, 54.
Вы правы, я смог разобраться. Спасибо Вам огромное
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2020, 17:44
Помогаю со студенческими работами здесь

изменение порядка следования в программе
Здравствуйте! искала в инете , что же это означает, но так и не нашла более объясняющего и...

Изменение порядка следования итемов в menustrip
День добрый.может кто подскажет, как программно поменять порядок следования итемов в menustrip?в...

Bootstrap 3. Изменение порядка следования адаптивных блоков
Необходимо, чтобы блоки размещались при разрешениях от 768px как показано на схеме 1: а при...

Изменение порядка следования элементов в цепном списке на обратный
Помогите на делфи сделать ПОЖАЛУЙСТА!!! Разработать алгоритм изменения порядка следования...

Изменение порядка следования столбцов в табличной части разделённой формы
Здравствуйте! Подскажите пожалуйста, какой код для перемещения столбца в табличной части...

Изменение порядка следования цифр целого положительного числа на обратный (доработать программу)
{ Написать функцию InvertDigits(k:longInt):LongInt меняющую порядок следования цифр целого...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru