Преобразование данных

Тема в разделе "Arduino & Shields", создана пользователем a1000, 26 сен 2019.

  1. a1000

    a1000 Гуру

    Возникла необходимость преобразовать переменную типа int в тип byte.
    Как пишут умные люди:

    byte() приводит значение к типу byte.

    Синтаксис:

    byte(x);

    где x — переменная любого типа.

    Но в описании переменных говорится следующее
    В Arduino Uno (и других платах на базе микроконтроллеров ATmega) переменные типа int хранят 16-битные (2-байтовые) значения.
    В то-же время: Переменная типа byte хранит 8-битное беззнаковое число.
    Возникает вопрос, как 2-байтовая интовая х будет преобразована в 8-битную переменную типа byte?
     
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Останется только то, что содержит младший байт.
    Невозможно впихнуть невпихуемое.
     
    Daniil, a1000 и parovoZZ нравится это.
  3. SergeiL

    SergeiL Оракул Модератор

    Да, откинется старший байт.
    А мне как то привычнее такой вид:
    Код (C++):
      int g;
      byte bbb;

      bbb=(byte)g;
     
     
    Daniil и a1000 нравится это.
  4. a1000

    a1000 Гуру

    То-есть если возьмём, к примеру
    Код (C++):
    int g=255;
    то в двоичном представлении это будет иметь вид
    Код (C++):
    b0000000011111111
    После преобразования
    Код (C++):
    byte bbb=byte(g)
    мы получим
    Код (C++):
    b11111111
     
  5. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Ну да. А если было 65280, то станет ноль.
     
    a1000 нравится это.
  6. SergeiL

    SergeiL Оракул Модератор

    На всякий случай,
    В настройках ИДЕ есть возможность выставить уровень warning - "Сообщения компилятора"
    Рекомендую поставить "Все". Максимальный уровень.
    Ибо, любой warning - потенциальная ошибка. За это и люблю Си.
    Чаще всего, варнинги - это либо неиспользуемая переменная или некорректное преобразование типов переменных.
    Есть повод задуматься, и сделать все корректно.
    По поводу вопроса ТС. Это про явное преобразование типов переменных. И это однозначно правильный вариант.