12 марта 2015 г.

Фокус с приведением типов данных

Рассмотрим умножение двух чисел int и long

int  i = 0;      
long L = 0;  
  
  i=40    ;
  L=i*1000;                  // умножаю int=40 на 1000 и ложу его в переменную long
  Serial.println(L);

Результат будет 40000 ? Нет!!!
В результате получаю       -25536 !!! Все потому, что 40000 не влазит в диапазон типа данных int (от -32768 до 32767).

Для получения желаемого результата 40000 нужно применять такой код:

  L=long(i)*1000  ;         // првожу число i к типу данных long
  Serial.println(L);

Получаем результат 40000.

1 комментарий:

  1. Причина фокуса проста: int * int. Если один из аргументов будет long, то всё будет ОК
    Так что можно чуточку проще сделать:
    L = i * 1000L;

    ОтветитьУдалить