Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/28: Рейтинг темы: голосов - 28, средняя оценка - 4.68
Альбина999

Битовые операции

19.03.2011, 00:35. Показов 5346. Ответов 5
Метки нет (Все метки)

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

Можете объяснить в чем суть,и с чего нужно начинать писать программу? Спасибо заранее!
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.03.2011, 00:35
Ответы с готовыми решениями:

Битовые операции C#
как ввести двоичное число без использования функции Convert, При том не 8-ми битовое, а 32-ух. И получим ли мы исходное число, если...

Перестановка пар бит в двух числах и битовые операции
Добрый день! Есть такая задачка. "Написать программу, которая позволит ввести два числа a и b типа uint с клавиатуры, напечатать их на...

Нужны идеи того, как распознать битовые цифры
Ребята,есть какие-то тривиальные пути к распознаванию цифр в файле?

5
 Аватар для afiskon
65 / 53 / 4
Регистрация: 06.09.2010
Сообщений: 254
22.03.2011, 13:40
Начните с псевдокода.
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
22.03.2011, 15:39
Цитата Сообщение от Альбина999 Посмотреть сообщение
Необходимо создать программу, считывающую со стандартного ввода двоичное число в формате “дополнение до единицы” и с помощью битовых операций преобразующую его в десятичное представление со знаком, которое должно выводиться на стандартный вывод.

Можете объяснить в чем суть,и с чего нужно начинать писать программу? Спасибо заранее!
Ты вовремя. Как раз на днях экспериментировал.

Тебе нужно перевечти 2ное число заданное в виде строки в 10й int с помощью побитовых операций.
Т.е. если у тебя в строке символ '1' то бит числа int на соответствующей позиции также 1. '0'->0

Вот мой код:
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
39
40
41
42
43
44
45
46
47
48
public enum ParseSuccess : int
{
    Success = 1,
}
static public ParseSuccess TryParseBinary(string s, out int result)
{
    int value = 0;
    fixed (char* pin = s)
    {
        
        char* cur = pin + s.Length;
        while (cur > pin)
            switch (*--cur)
            {
                case ' ':
                case '\n':
                case '\t':
                case '\r': continue;
                case '1': value |= 1; goto to_parse_body;
                case '0': goto to_parse_body;
                default: result = 0; return (ParseSuccess)(pin-cur);
            }
    to_parse_body:
        for (int position = 2; cur > pin; )
        {
            switch (*--cur)
            {
                case '1': value |= position; break;
                case '0': break;
                default : goto to_previos_spaces;
            }
            checked { position += position; }
        }
    to_previos_spaces:
        while (cur > pin)
            switch (*--cur)
            {
                case ' ':
                case '\n':
                case '\t':
                case '\r': continue;
                default: result = 0; return (ParseSuccess)(pin-cur);
            }
        result = value;
        return ParseSuccess.Success;
    }
    
}
Но это без стандартного знака. Думаю добавить предобработку труда не составит.

P.S.
Полную мою библиотеку по численному парсингу можно взять отсюдова: Leleko.Net.Numerics
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
23.03.2011, 00:32
увидев большой объем кода "эксперимента" (и что немаловажно, изобилирующим goto) решил тоже чуть-чуть на пару мин)

короче, это работает по примерам из вики, будет работать и дальше... вот только не очень понятно условие. надо что-то поизящнее и изощреннее с большим количеством "битовых операций"? я тока за))

C#
1
2
3
4
5
6
7
8
9
10
11
            string str = "10000010";
            // проверки на соответствие строки нулям и единицам кошернее зделать здесь, до алгоритма
 
            int res = 0;
            bool negative = str[0] == '1';
            for (int i = 1; i < str.Length; i++)
                if (str[i] == (negative ? '0' : '1')) res |= 1 << str.Length - i - 1;
            if (negative) res = -res;
 
            Console.WriteLine(res);
            Console.ReadKey();
Добавлено через 2 минуты
sigmov,
C#
1
2
3
4
5
6
7
8
            string str = "1000";
 
            int res = 0;
            for (int i = 0, l = str.Length; i < l; i++)
                if (str[i] == '1') res |= 1 << l - i - 1;
 
            Console.WriteLine(res);
            Console.ReadKey();
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
23.03.2011, 01:15
Цитата Сообщение от Mikant Посмотреть сообщение
увидев большой объем кода "эксперимента" (и что немаловажно, изобилирующим goto) решил тоже чуть-чуть на пару мин)
Добавлено через 2 минуты
sigmov,
C#
1
2
3
4
5
6
7
8
            string str = "1000";
 
            int res = 0;
            for (int i = 0, l = str.Length; i < l; i++)
                if (str[i] == '1') res |= 1 << l - i - 1;
 
            Console.WriteLine(res);
            Console.ReadKey();
Не спорю - красиво.
Для частного случая подойдет.
Но что с ним будет, если ввести скажем " 00111011 "?
Ок. Сделали Trim(' ','\t','\n');
Теперь работает.
Теперь вводим " 00111231" ? работает. Но неправильно. Надо чтоб непременно '0' || '1' и т.д.

Я делал код для библиотеки - там несколько иные задачи предо мной стояли, чем краткость кода.
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
24.03.2011, 00:02
о.О эта либа может спокойно хавать "00111231" и (не ёжить) выдавать число?? вот это либа - просто умница...

зы. к комменту: нет, не красиво. такого вообще не должно быть! ничего себе "частный" случай!! это какой-то неуч и (по состоянию) подлец засунул "нули и единицы" в строку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.03.2011, 00:02
Помогаю со студенческими работами здесь

Enum и битовые операции
namespace ConsoleApp3 { enum Numbers{ None = 0, One = 1, Two = 2, Free = 4 } ...

Работа с указателями и битовые операции (с C++ в C#)
Помогите перевести это в эффективный C# код :) int UnknownFunc0001(signed int a1) { return ((a1 &gt;&gt; 24) &amp; 0xFF) + ((((a1...

Битовые операции для char
День добрый. Можно ли произвести побитовый сдвиг влево (и другие битовые операции) над буквой или текстом? Я знаю что есть &lt;&lt;,...

Битовые операции - нужна пара примеров для освоения
прошу накидайте пару примеров по битовым операциям чтоб я мог разобратса

Реализовать класс MyArray, который бы поддерживал индексные операции, операции сложения, вычитания, умножения, деления
Необходимо реализовать класс MyArray, который бы поддерживал индексные операции, операции сложения, вычитания, умножения, деления. А также...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru