Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
4 / 4 / 3
Регистрация: 05.08.2012
Сообщений: 135

Зеркально инвертировать биты

09.09.2015, 10:21. Показов 5802. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача следующая. Необходимо перевести число из десятичной системы счисления в двоичную и зеркально отразить биты внутри числа, а так же провести обратную операцию.

Такое решение работает, но у меня возникает "смутное" ощущение, что это из серии в Москву через Пекин ))))


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
private string ReverseStringBuilder(string str)
        {
         StringBuilder sb = new StringBuilder(str.Length);
         for (int i = str.Length; i-- != 0; )
         sb.Append(str[i]);
        return sb.ToString();
        }
 
private List<byte> tableHead(byte mode, int adress, int dataCount)
        {
            List<byte> result = new List<byte>();
 
            //Формируем байты выходного слова с 0-7
            result.Add((byte)(((byte)mode << 6 | (adress >> 12)) & 0xFF));
            result.Add((byte)((adress >> 4) & 0xFF));
            result.Add((byte)((adress << 4 | dataCount - 1 >> 8) & 0xFF));
            result.Add((byte)(dataCount - 1 & 0xFF));
            result.Add((byte)((ID >> 24) & 0xFF));
            result.Add((byte)((ID >> 16) & 0xFF));
            result.Add((byte)((ID >> 8) & 0xFF));
            result.Add((byte)((ID) & 0xFF));
 
            //Инвертируем байты
            string temp;
 
            for (int i = 0; i < result.Count; i++)
            {
                temp = Convert.ToString(result[i], 2);
                int stringLength = temp.Length;
 
                for (int j = 0; j < 8 - stringLength; j++)
                    temp = "0" + temp;
 
                result[i] = Convert.ToByte(ReverseStringBuilder(temp), 2);
            }
            
            return result;
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.09.2015, 10:21
Ответы с готовыми решениями:

Есть 2 байта (старший и младший), которые надо слепить в одно число и инвертировать биты в этом числе
Здравствуйте! Есть 2 байта (старший и младший), которые надо слепить в одно число и инвертировать биты в этом числе. например: ...

Дан массив из 10 целых чисел. Инвертировать биты всех отрицательных чисел и найти сумму элементов полученного
Дан массив из 10 целых чисел. Инвертировать биты всех отрицательных чисел и найти сумму элементов полученного массива.

Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат
нужна помощь в битовых операциях.Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат.

6
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
09.09.2015, 10:50
Лучший ответ Сообщение было отмечено _Колючий_ как решение

Решение

Цитата Сообщение от _Колючий_ Посмотреть сообщение
зеркально отразить биты внутри числа
C#
1
2
3
4
        public static byte ReverseBits(byte b)
        {
            return (byte)((b * 0x0202020202ul & 0x010884422010ul) % 1023);
        }
1
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
09.09.2015, 10:57
C#
1
2
3
4
5
6
7
8
9
10
        static void Main(string[] args)
        {
            uint a = 341;
            Console.WriteLine("{0} {1}", a, Convert.ToString(a, 2));
            a = ~a;
            Console.WriteLine("{0} {1}", a, Convert.ToString(a, 2));
            a = ~a;
            Console.WriteLine("{0} {1}", a, Convert.ToString(a, 2));
            Console.ReadKey(true);
        }
1
4 / 4 / 3
Регистрация: 05.08.2012
Сообщений: 135
09.09.2015, 11:48  [ТС]
Storm23, круто! Это то, что надо.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.09.2015, 12:07
Storm23, я думал я тупой, когда пытался понять, откуда комп берет константы для быстрого деления, но чет я тут еще больше приуныл Принцип работы какой у этого метода? Какие-то сдвиги, обрезания, смутно понятно, что происходит, но например откуда взяты конкретные константы - вопрос

Добавлено через 1 минуту
Вроде как первая константа копирует byte в каждый октет long'а, а вот что потом - хз
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
09.09.2015, 12:25
Цитата Сообщение от Psilon Посмотреть сообщение
Принцип работы какой у этого метода?
Здесь объясняется http://graphics.stanford.edu/~... h64BitsDiv
(там есть еще пару методов, вроде из них самый быстрый - тот который с 4-мя операциями)
6
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.09.2015, 14:18
Storm23, ну да, первую часть я правильно понял, а дальше уже идет то, за что профессоры теории информации получают свои гранты
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2015, 14:18
Помогаю со студенческими работами здесь

Инвертировать 3,4,7,15 биты
Стоит задача &quot;Инвертировать 3,4,7,15 биты&quot; подскажите как сделать?

Инвертировать биты
Пишу для обучения небольшой класс на Python для работы с адресами и масками ipv4. Хранится ip-адрес в виде списка, где каждый элемент...

Инвертировать биты числа
установить в числе 347 биты если они не установлены,а если установлены снять

Инвертировать 4-й и 3-й биты регистра BH
Помогите плз с программной, а то не понимаю как делать её:( Необходимо инвертировать 4-й и 3-й биты регистра BH, а знаковый бит...

Как инвертировать биты
Итак, есть массив из трех элементов . В массиве 24 элемента. И как изменить порядок битов, чтобы они были наоборот, с а23,а22..а0 на...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru