Работа с битовым представлением

Тема в разделе "Микроконтроллеры AVR", создана пользователем Tomasina, 27 фев 2015.

  1. Tomasina

    Tomasina Сушитель лампочек Модератор

    я получаю от восьмиканального устройства состояние его каналов в виде восьми нулей/единиц:
    • deviceState: 01111100 - контакт на 1-м канале разомкнут, LED на 4-м канале включен (остальное аналогично)
    • deviceState: 01111101 - контакт на 1-м канале замкнут, LED на 4-м канале включен
    • deviceState: 01110101 - контакт на 1-м канале замкнут, LED на 4-м канале выключен
    Как мне выделить (узнать) из этого только, к примеру, состояние контакта на 1-м канале - 0111110x, независимо от остальных циферок?
    Т.е. в идеале получить что-то вроде boolean state1ch = true/false.
    Наложение маски boolean state1ch = deviceState & 00000001; не срабатывает (точнее, выполняет не то, что в моем представлении ожидалось).
     
  2. ANV

    ANV Гуру

  3. X-Dron

    X-Dron Гик

    А так
    boolean state1ch = deviceState & 1;
    boolean state2ch = deviceState & 2;
    boolean state3ch = deviceState & 4;
    boolean state4ch = deviceState & 8;
    или
    boolean state1ch = deviceState & b00000001;
    boolean state2ch = deviceState & b00000010;
     
    Последнее редактирование: 27 фев 2015
  4. ANV

    ANV Гуру

    Для двоичного числа префикс 0b, а не 0x
    И нужно использовать & - это побитовое, а не && (логическое)
     
  5. Tomasina

    Tomasina Сушитель лампочек Модератор

    спасибо, так работает.
     
  6. X-Dron

    X-Dron Гик

    согласен, только не 0b, а просто B
    http://arduino.ru/Reference/Byte
    А вот насчет && Вы погорячились. В данном случае нужно именно &&
    http://www.c-cpp.ru/books/bitovye-operatory
     
  7. ANV

    ANV Гуру

  8. X-Dron

    X-Dron Гик

    Да, похоже, что я был не прав. И приведенная мной же цитата тому подтверждение. Для правильного кода должен быть один амперсант.