Про int и byte

Тема в разделе "Arduino & Shields", создана пользователем angabanga, 15 дек 2015.

  1. angabanga

    angabanga Нерд

    #define FIRST_SEGMENT_PIN 2
    #define SEGMENT_COUNT 7

    // префикс «0b» означает, что целое число за ним записано в
    // в двоичном коде. Единицами мы обозначим номера сегментов
    // индикатора, которые должны быть включены для отображения
    // арабской цифры. Всего цифр 10, поэтому в массиве 10 чисел.
    // Нам достаточно всего байта (англ. byte, 8 бит) для хранения
    // комбинации сегментов для каждой из цифр.
    byte numberSegments[10] = {
    0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010,
    0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110,
    };

    void setup()
    {
    for (int i = 0; i < SEGMENT_COUNT; ++i)
    pinMode(i + FIRST_SEGMENT_PIN, OUTPUT);
    }

    void loop()
    {
    // определяем число, которое собираемся отображать. Пусть им
    // будет номер текущей секунды, зацикленный на десятке
    int number = (millis() / 1000) % 10;
    // получаем код, в котором зашифрована арабская цифра
    int mask = numberSegments[number];
    // для каждого из 7 сегментов индикатора...
    for (int i = 0; i < SEGMENT_COUNT; ++i) {
    // ...определяем: должен ли он быть включён. Для этого
    // считываем бит (англ. read bit), соответствующий текущему
    // сегменту «i». Истина — он установлен (1), ложь — нет (0)
    boolean enableSegment = bitRead(mask, i);
    // включаем/выключаем сегмент на основе полученного значения
    digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment);
    }
    }

    Ребят, это код 13 эксперимента про секундомер .
    У меня вопрос почему здесь переменной типа интеджер(mask) присвоили значения byte.каким образом? Получается маина уже не должна это видеть как двличный код, разве нет?
     
  2. ANV

    ANV Гуру

    Все числа в памяти записаны в двоичном коде независимо от того, как вы их объявляли в программе - в десятичной, 0b двоичной или 0x шестнадцатеричной.
    int занимает в памяти два байта (16 бит) и хранит значения от -32768 до 32767.
    byte занимает, как легко догадаться, один байт и значения от 0 до 255.
    Так что присвоение int'у значения byte безболезненно и никем не противопоказано.
     
    Tomasina и angabanga нравится это.
  3. angabanga

    angabanga Нерд

    я конечно это понимаю. Просто странным мне это показалось. Спасибо
     
  4. angabanga

    angabanga Нерд

    А могли бы мы маск объявит переменной типа байт же, правильно. Да и байт в начале я мог бы объявить интом? Я просто не дома. Проверить не могу
     
    Последнее редактирование: 15 дек 2015
  5. ANV

    ANV Гуру

    Могли :)
     
  6. Sparkfire

    Sparkfire Гик

    Больше таких тем. Интересных и поучительных.