|
0 / 0 / 0
Регистрация: 16.06.2015
Сообщений: 1
|
|||||||||||
Чтение и изменение бита в числе16.06.2015, 12:30. Показов 24405. Ответов 35
Метки нет (Все метки)
Доброго времени суток!
Столкнулся с такой проблемой - через СOM порт от контроллера получаю массив байт данных, сохраняю их в виде переменной Double.
Каждый установленный бит в числе имеет смысловую нагрузку. Вопрос -каким образом можно обращаться к отдельным битам в числе (Аналог команды в ассемблере setb Acc.N (установить бит N в "1") и clr Acc.N (установить бит N в "0")). Пока что додумался только до преобразования полученного числа в бинарный вид при помощи функции
0
|
|||||||||||
| 16.06.2015, 12:30 | |
|
Ответы с готовыми решениями:
35
Операция "сброса бита в числе" (число и номер бита) Инвертировать 2 средних бита в числе Установка бита в двоичном числе |
|
Заблокирован
|
||
| 16.06.2015, 12:40 | ||
|
Добавлено через 2 минуты bByte and 1 - нулевой бит bByte and 2 - первый бит bByte and 4 - второй бит bByte and 8 - третий бит и т.д.
0
|
||
|
Модератор
|
||||||
| 16.06.2015, 14:20 | ||||||
Сообщение было отмечено The trick как решение
Решение
3
|
||||||
| 16.06.2015, 17:17 | |
|
0
|
|
|
Модератор
|
||
| 16.06.2015, 17:25 | ||
|
2
|
||
|
34 / 31 / 1
Регистрация: 06.01.2017
Сообщений: 300
|
|||||||||||||||||||||||||||||||
| 10.11.2017, 04:05 | |||||||||||||||||||||||||||||||
|
Идеалом было бы иметь массив констант = константа-масcив.
Если это нельзя, то надо просто вычислить, вернее, задать вручную элементы массива. Что-то вроде
Битовые операторы в VBA такие же, как в Паскале: Or, And, Xor Теперь, чтобы узнать, выставлен ли пятый бит в маске М, пишем
Строго говоря, результат операции не Boolean, а Long, причем в случае отсутствия бита имеем 0, а случае присутствия имеем 32. Но VBA преобразует 0 в False, а 32 в True Чтобы выставить пятый бит пишем:
Чтобы перекинуть (изменить) пятый бит пишем:
Чтобы скинуть (обнулить) пятый бит надо применить двойную операцию:
В принципе можно и так:
0
|
|||||||||||||||||||||||||||||||
|
Заблокирован
|
|
| 10.11.2017, 23:59 | |
|
0
|
|
|
34 / 31 / 1
Регистрация: 06.01.2017
Сообщений: 300
|
|
| 11.11.2017, 01:31 | |
|
Верно!
Про Not я и забыл совсем!
0
|
|
|
34 / 31 / 1
Регистрация: 06.01.2017
Сообщений: 300
|
||||||
| 25.11.2017, 15:19 | ||||||
|
В итоге вот такой маленький код:
Функции BitXxx(m, N as byte) как раз и производят описанные выше операции: BitGet - Показывает бит BitPut - Выставляет бит BitOut - Сбрасывает бит BitSwp - Перекидывает бит
2
|
||||||
|
oh my god
|
||||||
| 25.11.2017, 17:46 | ||||||
|
Я про это знал давно, но решил пойти дальше, и даже продемонстрировать ну очень наглядно
если жать на CheckBox'ы то число будет всевремя меняться используется только Xor Для работы этого кода нужно только скопировать код в модуль формы
0
|
||||||
|
34 / 31 / 1
Регистрация: 06.01.2017
Сообщений: 300
|
||||||
| 26.11.2017, 02:08 | ||||||
|
Выше описано 16-разрядная версия.
Возможно, кому-то покажется интересной 32-разрядная
1
|
||||||
|
103 / 63 / 10
Регистрация: 13.02.2017
Сообщений: 178
|
|
| 30.11.2017, 18:06 | |
|
Так как быть с 32-м битом?
С числом FFFFFFFF выдаст оверфлор...
0
|
|
|
oh my god
|
|
| 30.11.2017, 18:23 | |
|
0
|
|
|
34 / 31 / 1
Регистрация: 06.01.2017
Сообщений: 300
|
|
| 30.11.2017, 18:24 | |
|
Никак не быть.
В типе Long нет бита #32. Последний бит #31. Т.е. их всего 32, но нумеруются они с нуля, так что 32-ой бит имеет #31
0
|
|
|
oh my god
|
|
| 30.11.2017, 18:30 | |
|
Это у тебя пальцев всего девять, потомучто нумеруются с нуля !
32 бита использует бейсик для своих операций арифметических/логических от -2147483647 и до 2147483647 всего будет 2 ^32
0
|
|
|
34 / 31 / 1
Регистрация: 06.01.2017
Сообщений: 300
|
|
| 30.11.2017, 18:45 | |
|
Битов 32, а вот номер у 32-го как раз 31.
Если Вас интересует, что надо писать в последний бит, так в описании инициализации массива Deg2 это показано: Deg2(31) = - 2^31 Т.е. так: Deg2(k) =+ 2^k при k<31 Deg2(k) =- 2^k при k= 31
0
|
|
|
103 / 63 / 10
Регистрация: 13.02.2017
Сообщений: 178
|
|
| 30.11.2017, 19:06 | |
|
Все всё поняли, вопрос был есть ли способ таки узнать старший бит у unsigned long числа (которого нет в вб6)...
Чисто есть, а действий с ним производить нельзя...
0
|
|
|
34 / 31 / 1
Регистрация: 06.01.2017
Сообщений: 300
|
||||||
| 30.11.2017, 19:20 | ||||||
|
Могу предположить, что узнать это можно простым сравнением.
Для простого Long это будет: m < 0 Для UnSigned Long, он же, наверное, LongWord вот так: m > SummDeg2(30) Где SummDeg2(N) функция, возвращающая сумму степеней двойки до N включительно
1
|
||||||
|
103 / 63 / 10
Регистрация: 13.02.2017
Сообщений: 178
|
||||||
| 01.12.2017, 16:23 | ||||||
|
Состыковал в кучку
0
|
||||||
|
34 / 31 / 1
Регистрация: 06.01.2017
Сообщений: 300
|
||||||
| 02.12.2017, 15:19 | ||||||
|
Рекомендую прописать ByVal для аргумента L.
Иначе VBA будет ворчать каждый раз, когда ты будешь в качестве L использовать не Double, так что придётся аргумент заключать в скобки. А с ByVal переменная любого (числового!!!) типа будет интерпретироваться как Double. Т.е. вот так:
0
|
||||||
| 02.12.2017, 15:19 | |
|
Помогаю со студенческими работами здесь
20
Ошибка при определении нужного бита в большем числе Найти номер первого (последнего) справа нулевого бита в целом числе a Чтение бита четности Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка 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/
|