Как объединить биты в байт?
- Войдите на сайт для отправки комментариев
Чт, 28/02/2019 - 19:58
Привет
Условно, есть четыре кнопки подключенные к цифровым пинам
Считываю состояния кнопок, пишу их в булевы переменные, вывожу в порт - все ок
Но хотелось бы как то "склеить" эти четыре, по сути независимых друг от друга, бит
Пример: s3=1; s2=1; s1=0; s0=0;
Как собрать их в целый байт типа 00001100, чтобы в дальнейшем можно было работать уже с целым числом.. перевести его в нашу систему счисления (будет 12, если не ошибаюсь), провести какие-то операции с ним, вычесть, умножить и т.д.
Прошу прощения, если где-то ошибся в терминологии, меньше недели занимаюсь программированием :)
Мой код:
boolean s3, s2, s1, s0; void setup () { pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); Serial.begin(9600); } void loop() { s3=!digitalRead(2); s2=!digitalRead(3); s1=!digitalRead(4); s0=!digitalRead(5); Serial.print(s3); Serial.print(s2); Serial.print(s1); Serial.println(s0); delay(1000); }
Структуру с битовыми полями сделай
summ= s3*8+s2*4+s1*2+s0;
Спасибо за ответ!
Мне, кажется, ещё рано связываться с таким материалом
Полчаса посидел в гугле по запросу "битовые поля с++" и чуть не разревелся как школьник
Возможно сделать это другим путём? Наверняка есть какие-то простые математические операции для подобного..
Способ побитового сдвига поначалу показался мне подходящим, но не фартануло
Вам надо еще проще, чем во #2?
Спасибо за ответ!
Мне, кажется, ещё рано связываться с таким материалом
Полчаса посидел в гугле по запросу "битовые поля с++" и чуть не разревелся как школьник
Возможно сделать это другим путём? Наверняка есть какие-то простые математические операции для подобного..
Способ побитового сдвига поначалу показался мне подходящим, но не фартануло
вам же подсказали постом выше, как можно сделать не просто, а очень просто, и никаких сдвигов
Спасибо, работает!
Но не могли бы вы, хотя бы в кратце описать такой метод? Не встречал такой конструкции и интересно как это работает
Если описать, то магия может перестать работать...
Каждый бит умножаем на "вес его разряда" и суммируем.
Товарищи, я начинающий, хоть и сообразил создать переменную summ из #2, но это заняло некоторое время, а вы уже набросились на меня, как будто я негодяй
Спасибо, добрый человек!
Товарищи, я начинающий, хоть и сообразил создать переменную summ из #2, но это заняло некоторое время, а вы уже набросились на меня, как будто я негодяй
вам последовательность цифр 1-2-4-8-16-32-64-128 о чём нибудь говорит?
Спасибо, добрый человек!
Не на чем, вы главное про него не забудьте, когда начнете числа расчленять для вывода на индикаторы.
вам последовательность цифр 1-2-4-8-16-32-64-128 о чём нибудь говорит?
Чувствую подвох, но все же отвечу, это результаты степени двойки. Например, 8=2³ и т.д
А посикоку арихметика у МК двоичная, то каждый разряд в байте и далее, равен ее степени.
А посикоку арихметика у МК двоичная, то каждый разряд в байте и далее равен ее степени.
Предельно ясно, спасибо!
а вы уже набросились на меня
Так ото ж! :)))
Kirill Iashin, а Ваш интерес точно с терроризмом не связан? А то, чего доброго :(
Kirill Iashin, а Ваш интерес точно с терроризмом не связан?
Хорошая попытка, товарищ майор :)
Обычная практика, сам создаю себе проблему и пытаюсь решить.. как видите, не усегда успешно
Вы мне льстите, до майора я ещё не дорос, но точно знаю, что отряд из восьми вахабитов называется вахабайтом, вот и думаю, не эти ли отряды Вы формируете?
Вы мне льстите, до майора я ещё не дорос, но точно знаю, что отряд из восьми вахабитов называется вахабайтом, вот и думаю, не эти ли отряды Вы формируете?
Ох, Евгений Петрович, есаул эт вроде тысячник, сиречь, полковник. А у Вас, значица, две звездочки (бааааальших), али неправ?
Это вы о названии поста про биты в байт?
Понимаю, что boolean так или иначе занимает целый байт, просто так было проще описать суть проблемы
Хорошего вечера! :)
Boolean можно запихнуть и в 1 бит
PS Дожили, на форумах биты и двоичную арифметику расписывать, жервы java и прочих framework ов :(
Надеюсь, это никак не связано в битовыми полями? Мне кажется я сегодня об этом читал..
Надеюсь, это никак не связано в битовыми полями? Мне кажется я сегодня об этом читал..
Начните с основ, как работает транзистор, какая нибудь микросхема, логические И ИЛИ и прочее, станет сразу проще.
ЗЫ. Залез в википедию почитать что такое битовые поля, никогда не знал что они так называются - при чем здесь это?
Ох, Евгений Петрович, есаул эт вроде тысячник, сиречь, полковник. А у Вас, значица, две звездочки (бааааальших), али неправ?
Есаул имеет чистый погон. Соответсвует примерно майору. Старше него "войсковой старшина" - погоны как у подполковника. Младше - подъесаул - погоны как у капитана ( и статус примерно такой же).
Спасибо. Понемногу разбираюсь, как раз вчера изучал логические операции, в частности понравился искл ИЛИ (^), получилось преобразовать 4 битный код Грея в двоичный
В любом случае знания хоть какие-то уже есть, но их сложно применить если занимаешься этим несколько дней и толком не осознаешь как это устроено
На каком-то форуме видел, что можно сделать boolean в 1 бит, если использовать struct.. но могу ошибаться
Да и вообще, это была шутка ;)
Ох, Евгений Петрович, есаул эт вроде тысячник, сиречь, полковник. А у Вас, значица, две звездочки (бааааальших), али неправ?
Есаул имеет чистый погон. Соответсвует примерно майору. Старше него "войсковой старшина" - погоны как у подполковника. Младше - подъесаул - погоны как у капитана ( и статус примерно такой же).
Евгений Петрович, взрослый человек, а в ряженых играетесь, я понимаю приятель, он по жизни казак, нагайкой вон пацанов воспитывает, предводитель жеж...
Для начала - свободное ношение оружия, то-есть никаких регистраций, нет этого - нет казачества...
один из моих первых проектов - кодовый замок на 4 кнопки. Там у каждой кнопки свой вес (как в посте 2), есть время определения одновременного нажатия т.е. после нажатия любой из кнопок, запускается таймер и по его окончании считываются все кнопки. Веса нажатых кнопок суммируются и сравниваются с константой кода (массив). Запускается таймер сброса. если больше ничего не нажать переменная массива скинется, если нажать - повторяем процедуру и сравниваем со следующим элементом массива. когда переменная массива достигнет необходимой величины и сумма весов последнего нажатия будет соответствовать значению массива, я все скидываю и открываю замок - если нет, переменная дальше ростет и пишет в константу всякую муть - защита от перебора, когда кому-то охота потыкать на кнопки и тапа брутом открыть дверь.
UPD про флаг забыл, пока идешь по массив управильно - флаг есть, когда ошибся - флаг скинулся.
Одна из самых простых и достаточно эффективных методик защиты от перебора - логарифмически увеличивающаяся задержка при неправильных комбинациях
Одна из самых простых и достаточно эффективных методик защиты от перебора - логарифмически увеличивающаяся задержка при неправильных комбинациях
задержка чего? повторногонабора комбинации? тебе там накидает какой-нить олень от делать нечего, а ты потом стой и жди, когда таймер скинется... думал - не мой вариант. дверь откроется только если начать комбинацию правильно, а потом можешь 10 раз правильно набрать и ничего не будет пока таймер сброса не скинешь. т.е. ошибся, подожди немного и начинай снова а если подряд тыкать...
Как же он накидает, если просто не реагировать после неправильного набора. Задолбется кидать