www.open-tager.ru
https://open-tager.ru/forum/

Вопрос программистам про операторы.
https://open-tager.ru/forum/viewtopic.php?f=5&t=2051
Страница 1 из 1

Автор:  Инквизитор [ 12 апр 2013, 00:34 ]
Заголовок сообщения:  Вопрос программистам про операторы.

Строю интересный девайс. Уперся в недостаточные свои знания.
Вводная:
Использую 4 бита. (в байте забираю для нужд 4 первых бита)
Изначально одна(или две) единички случайным образом (например 0010)

1. вопрос. Как случайным образом добавить туда еще единичку? (наример 0010 ---> 0110) а потом еще одну.0110-->1110
Сейчас пытался реализовать оператором OR с байтом 00010001 в котором сдвигаю влево через флаг, но что то не срастается.

2й вопрос: Как получить TRUE при совпадении мест хотя бы одной единички при сравнении с другим байтом? т.е. 0110 и 0010 = тру?


ЗЫ ответ хотелось бы в PIC Basice :)

Автор:  ВовВовыч [ 12 апр 2013, 00:44 ]
Заголовок сообщения:  Re: Вопрос программистам про операторы.

ну по первому вопросу видимо условно случайные числа надо использовать,а по второму-маску.
ИМХО,ибо поздно))

Автор:  mail_robot [ 12 апр 2013, 04:31 ]
Заголовок сообщения:  Re: Вопрос программистам про операторы.

во втором вопросе поможет операция XOR, она даст байт отличный от нуля, если маска совпала с образцом и она не нулевая

а в первом бейсиком я не знаю как решить, на сях там проще простого было бы. Хотя можно решить. Чтобы добавить единичку в байт надо просто сложить его с маской и все. Там появится единичка, где единичка будет в слагаемом. Только надо точно знать что на месте той единички до этого был нолик, иначе будет перенос и единичка появится в другом месте
лучше всетки использовать OR по маске для этой цели

Автор:  tommy [ 12 апр 2013, 09:10 ]
Заголовок сообщения:  Re: Вопрос программистам про операторы.

чёта народ ночью понаписал странного.

Цитата:
0110 и 0010 = тру?

нам поможет проверка на ноль результата побитовой конъюнкции (И).

Цитата:
1. вопрос. Как случайным образом добавить туда еще единичку? (наример 0010 ---> 0110) а потом еще одну.0110--1110 Сейчас пытался реализовать оператором OR с байтом 00010001 в котором сдвигаю влево через флаг, но что то не срастается.
всё должно работать. X OR Y, где Y - это произвольный бит (0001, 0010, 0100, 1000). может биты совпадают и результата не видно - 0010 or 0010 = 0010? тогда уже всё зависит от требований. можно сдвинуть Y влево/вправо, можно вообще табличку замутить на 32 поля маски и вообще не париться со сдвигами. при этом поле будет полубит в худшем случае, либо 2 бита, если индекс единички хранить.

Автор:  mail_robot [ 12 апр 2013, 09:12 ]
Заголовок сообщения:  Re: Вопрос программистам про операторы.

а еще проще писать на си, там это все без выноса мозга организовано уже

Автор:  Инквизитор [ 12 апр 2013, 11:09 ]
Заголовок сообщения:  Re: Вопрос программистам про операторы.

Спасибо.
1. Буду пользовать OR и сдвиг. А при совпадении единичек - пусть будет "воля случая" - не добавиться единичка.
2. AND и правда решит мою задачку )

Автор:  Инквизитор [ 13 апр 2013, 17:37 ]
Заголовок сообщения:  Re: Вопрос программистам про операторы.

Инквизитор писал(а):
Спасибо.
1. Буду пользовать OR и сдвиг. А при совпадении единичек - пусть будет "воля случая" - не добавиться единичка.
2. AND и правда решит мою задачку )


1. Со сдвигом как то не срослось. Сделал LOOKUP

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/