45213

[code]

    void setup() {
     Serial.begin(9600);
    }
    void loop() {
        int a=10;
        long b = a * 10000; //①
    //  long b = 100000;  //②
        Serial.print(b);
        Serial.print("\n");
        delay(1000);
    }
    
[/code]

Arduino Unoに、上記コードを転送し、シリアルモニタを確認すると  
①では、-31072が表示され  
②では、100000が表示されます。  
これは、何故でしょうか？


CC BY-SA 4.0
2018-07-01T07:48:50.587
45212
2018-07-01T12:30:57.563
2018-07-01T12:30:57.563
19110
15090
question
arduino
Arduino Unoのデータ型?


Arduino Unoでは、`int`は符号付16bit整数として扱うようなので、「`a *
10000`」の演算結果がオーバーフローしているからと思います。(100000の下位16bitを符号付整数としてみると、ちょうど「-31702」になります)

＃参考:
[Auduino日本語リファレンス:int(整数型)](http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=1105)

`long`は符号付32bitのようなので、次のような挙動の差になっているのではないでしょうか?

  * ①は、オーバーフローした結果がaに代入される
  * ②は、コンパイラが`100000`をlong定数として扱ってaに代入される


CC BY-SA 4.0
2018-07-01T08:23:48.480
45213
2018-07-01T08:23:48.480
20098
45212
answer