質問: 100000; //2 Serial.print(b); Serial.print("\n"); delay(1000); } ``` Arduino Unoに、上記コードを転送し、シリアルモニタを確認すると 1では、-31072が表示され 2では、100000が表示されます。 これは、何故でしょうか?
回答: Arduino Unoでは、`int`は符号付16bit整数として扱うようなので、「`a * 10000`」の演算結果がオーバーフローしているからと思います。(100000の下位16bitを符号付整数としてみると、ちょうど「-31702」になります) #参考: Auduino日本語リファレンス:int(整数型) `long`は符号付32bitのようなので、次のような挙動の差になっているのではないでしょうか? * 1は、オーバーフローした結果がaに代入される * 2は、コンパイラが`100000`をlong定数として扱ってaに代入される