Вопрос по типам переменных и умножению

Тема в разделе "Arduino & Shields", создана пользователем EandV, 3 ноя 2018.

  1. EandV

    EandV Нерд

    Всем привет!

    Что-то я ничего не понимаю... Задача простая - умножить переменную на 1000.
    Но в зависимости от величины переменной результат какой-то неадекватный получается.
    Например при значении переменной до 32 (включительно) всё умножается нормально получается: 32000.
    А если значение переменной больше, то получаются какие-то отрицательные значения, например при 35 результат получается: -30536

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

    Что я делаю не так?

    Сам код:
    Код (C++):

    int aaaa;
    int bbbb;

    void setup() {
      // put your setup code here, to run once:
        Serial.begin(9600);
    aaaa = 35;
    bbbb = aaaa * 1000;
    }

    void loop() {
      // put your main code here, to run repeatedly:
      delay (500);

    Serial.println(aaaa);
    Serial.println(bbbb);
    }
     
  2. EandV

    EandV Нерд

    Нагуглил, что у int максимальное, значение: 32767, у unsinged int 65535. Но почему не работает с long?

    Результат по коду ниже получается: 4464

    Код (C++):

    int aaaa;
    long bbbb;


    void setup() {
      // put your setup code here, to run once:
        Serial.begin(9600);
    aaaa = 70;
    bbbb = aaaa * 1000;
    }

    void loop() {
      // put your main code here, to run repeatedly:
      delay (500);

    Serial.println(aaaa);
    Serial.println(bbbb);
    }
     
    DetSimen нравится это.
  3. Ну а приводить кто будет?
    (long)aaaa * 1000
     
    arkadyf, DetSimen и EandV нравится это.
  4. DetSimen

    DetSimen Guest

    или
    bbbb = aaaa *1000L;
     
    parovoZZ, arkadyf и EandV нравится это.
  5. EandV

    EandV Нерд

    Всем спасибо!