Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 1
Регистрация: 21.03.2019
Сообщений: 16

Установка нескольких битов в булевом массиве

21.03.2019, 17:00. Показов 1492. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, в основном имел дело с программированием промышленных контроллеров, поэтому с C# имею некоторые проблемы. Пытаюсь сделать как бы симулятор Modbus-устройства на C# в Windows Form. Для этого мне нужно в массиве битов, например массив из 16 битов, устанавливать биты и сбрасывать. Устанавливать один из битов массива получается, а если нужно установить, например, 3-ий а потом 5-ый, то установится только 5, а третий сброситься на false(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
 
      private void textBox1_TextChanged(object sender, EventArgs e)
        {
            int a = Convert.ToInt16(textBox1.Text); // функция, получаемая из контроллера 
            int b = Convert.ToInt16(textBox2.Text); //номер бита, который нужно установить в 1
            int[] Coils = new int[16]; // пробовал и массивом int, но ушел к BitArray
            BitArray bCoils = new BitArray(8);
           
            var strbCoils = Encoding.Default.GetString(byteCoils);
           
            if (a == 5)
                
            {                            
                bCoils.Set(b,true);
               
                StringBuilder sb = new StringBuilder();
                foreach (var c in bCoils2)
                {
                    sb.Append(c);
                }
                string outVAR = sb.ToString();
                //string StrCoils = String.Join("",Mass2.Select(n => n.ToString()));
                
                textBox3.Text = outVAR;
             }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2019, 17:00
Ответы с готовыми решениями:

Установка битов
Установка битов Для этого надо сложить операцией «ИЛИ» x с маской, у которой единицы в соответствующих позициях. Например, чтобы...

Установка и сброс битов
Здравствуйте. Мне совершенно не ясно, как устанавливать/сбрасывать бит по его номеру(Читал об этом и в книге и в интернете. Скорее всего,...

Установка и сброс битов
Мaсcив из 6 бaйт. Установить в каждом бaйте 3-ий бит в 1, 4-ый бит в 0, 7-ой в 0. Написала программу, но выходит ошибка Contstant too...

4
Фрилансер
805 / 312 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
22.03.2019, 00:29
Lmstr,
как вариант, можно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
int a = 0; // Это и будет битовым массивом
a ^= (1 << 0); // Устанавливаем 1-й бит 
a ^= (1 << 1); // Устанавливаем 2-й бит
a ^= (1 << 2); // Устанавливаем 3-й бит
a ^= (1 << 3); // Устанавливаем 4-й бит
a ^= (1 << 4); // Устанавливаем 5-й бит
a ^= (1 << 5); // Устанавливаем 6-й бит
a ^= (1 << 0); // Снимаем 1-й бит
a ^= (1 << 1); // Снимаем 2-й бит
a ^= (1 << 2); // Снимаем 3-й бит
a ^= (1 << 3); // Снимаем 4-й бит
a ^= (1 << 4); // Снимаем 5-й бит
a ^= (1 << 5); // Снимаем 6-й бит
Еще такой вариант... Похож на предыдущий, но можно битам задать имена:
C#
1
2
3
4
5
6
7
8
9
10
11
12
    [Flags]
    public enum Bits
    {
        clear = 0,
        a=1,
        b=2,
        c=4,
        d=8,
        e=16,
        f=32
        // и так далее
    }
Использование:
C#
1
2
3
4
5
6
7
Bits bits = Bits.clear; // Все биты по нулям
bits ^= Bits.a; // Устнавливаем первый бит
bits ^= Bits.b; // Устнавливаем второй бит
bits ^= Bits.c; // Устнавливаем третий бит
bits ^= Bits.a; // Снимаем первый бит
bits ^= Bits.b; // Снимаем второй бит
bits ^= Bits.c; // Снимаем третий бит
Проверка, установлен ли бит:
для 1-го варианта
C#
1
bool isChecked = ((a & (1 << 2)) >> 2) == 1; // проверяем установлен ли 3-й бит
для 2-го варианта аналогично
C#
1
bool isChecked = (bits & Bits.a) == Bits.a; // Установлен ли бит "a"?
Добавлено через 11 минут
PS. Не очень понял в чем у Вас возникли трудности с массивом int[] (хотя логичнне было бы bool[]) и с BitArray... И в том и в другом случае можно значения менять независимо от остальных...
1
1 / 1 / 1
Регистрация: 21.03.2019
Сообщений: 16
22.03.2019, 10:31  [ТС]
asn31337, спасибо, будем пробовать, похоже, что проблема у Нас с мышлением,которое привязано к железу, и низкими знаниями синтаксиса и возможности C#
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
22.03.2019, 11:18
Вы каждый раз, вызывая указанный метод, создаете новый экземпляр BitArray, поэтому ВСЕГДА будет установлен только один бит.
1
1 / 1 / 1
Регистрация: 21.03.2019
Сообщений: 16
22.03.2019, 12:31  [ТС]
MVK, Даа, в этом и была проблема. Три дня сидел с этим делом . Ну, что ж, теперь за то знаю. Всем спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.03.2019, 12:31
Помогаю со студенческими работами здесь

Си. Макросы установки, сброса нескольких битов.
Есть у кого такие макросы?

Установка конкретных битов в байте
Привет народ! Необходимо в байт записывать конкретные биты. Причем данные еще разбиты на 4 кадра. Допустим 1 байт = 8 бит = 4 кадра по 2...

Установка отдельных битов в РВВ
Добрый день! Подскажите пожалуйста, как устанавливать отдельные биты в регистре ADMUX? Нужно в процессе работы программы выбирать канал...

Установка, выделение, очистка, инвертирование битов по маске
пожалуйста,как на языке C# написать программу для: 1)установки битов по маске 2)выделение битов по маске 3)очистку битов по...

Atmega16 (установка битов в регистрах ввода-вывода)
какой командой устанавливаются флаги в регистрах? (например флаги TCCR0, TCNTO и т,д) на ассемблере ( в AVR Studio)


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru