Примитивный скетч отрабатывает для меня неожиданно. Переменная “zzz” объявлена как “long”, однако, при перемножении в ней числа более 181 выходит за пределы, которые характерны для переменной типа “int“ (). То есть, ведет себя не как “long“, а как “int“. Подскажите, где я тут накосячил?
int volt=177; //напряжение (вольты)
int resist=10; //сопротивление (омы)
long zzz=0; //промежуточная переменная
long pwr=0; // мощность (ватты)
void setup ()
{
Serial.begin (115200);
}
void loop ()
{
//Вычисляем мощность (volt*volt/resist)
zzz=volt*volt;
pwr=zzz/resist;
Serial.print (volt);
Serial.print (" ");
Serial.print (zzz);
Serial.print (" ");
Serial.println (pwr);
delay (1000);
volt++;
}
Я не знаю, что эти слова означают, но в Вашем коде явно написано что-то другое:
Здесь. Присутствуют два операции. Приоритет операции умножения выше приоритета операции присваивания. Поэтому, сначала выполняется умножение двух величин типа int (результат имеет тип int), а потом этот результат присваивается переменной типа long.
Деда, а почему именно так?
То есть в выражении где один член имеет явное приведение типа, то считается что и все члены тоже будут приведены к этому типу? Так?