算術演算子
+, -, *, /
演算子+、 - 、*、および/はそれぞれ、2つのオペランドの和、差、積または商にそれぞれ評価されます。
演算は、オペランドのデータ型を使用して行われるため、9と4はint変数であるため、9/4は2になります。
これは、結果がデータ型に格納できるものより大きい場合(たとえば、2,147,483,647の値を持つintに1を加えると、-2,147,483,648となる)、操作がオーバーフローする可能性があることも意味します。
オペランドのタイプが異なる場合は、「大きい」タイプが計算に使用されます。 数値の1つ(オペランド)がfloat型またはdouble型の場合、浮動小数点数が計算に使用されます。
注意
これらの規則の詳細は、このマニュアルの範囲を超えています。 詳細は、Bjarne Stroustroupによる「The C ++ Programming Language」、付録C、特に§§C.4-C.6、またはC ++型変換に関するWikiBooksの項を参照してください。
コンピュータが整数を表現する方法の詳細については、Wikipediaの2の補数を参照してください。
利用例
code:sample1.ino
y = y + 3;
x = x - 7;
i = j * 6;
r = r / 5;
構文
code:sample2.ino
result = value1 + value2;
result = value1 - value2;
result = value1 * value2;
result = value1 / value2;
引数
value1:任意の数値変数または定数
value2:任意の数値変数または定数
プログラミングのヒント
整数定数のデフォルトはintであることを知っているので、定数計算の一部がオーバーフローすることがあります(たとえば、200000 * 5000000は負の結果になります)。
あなたの計算から最大の結果を保持するのに十分な大きさの可変サイズを選択してください。
あなたの変数がどのような点で「ロールオーバ」するのか、また他の方向に何が起こるかを知る。 (0 - 1)、符号付き算術演算の場合は(0 - -2,147,483,648)です。
分数を必要とする数学では、浮動小数点変数を使用できますが、サイズが大きく、計算速度が遅い(STM32には浮動小数点ハードウェアがないため、すべての浮動小数点計算をソフトウェアで行う必要があります)。
キャスト演算子を使用します(例: (int)myFloatを使用して、あるタイプの変数を別の変数タイプに変換します。
Arduinoの互換性
MapleのSTM32プロセッサは32ビットマシンなので、int型はArduinoよりもMaple上ではるかに高い値でオーバーフローします。 特に、Mapleではintは2,147,483,648に達するまでオーバーフローしません(負になります)。 Arduinoでは32,767でオーバーフローします。 このため、Maple上で実行されるプログラムは、オーバーフローの問題に遭遇する可能性は非常に低くなります。 次の表は、Mapleの整数データ型のサイズと範囲をまとめたものです(long long型の範囲は近似値です)。
table:整数型の有効値
Datatype Unsigned range Signed range Size (bytes)
char 0 — 255 -128 — 127 1
short 0 — 65,535 -32,768 — 32,767 2
int 0 — 4,294,967,295 -2,147,483,648 — 2,147,483,647 4
long 0 — 4,294,967,295 -2,147,483,648 — 2,147,483,647 4
long long 0 — 1.8*10E19approx.) -9.2*10E18 — 9.2*10E18 (approx.) 8
参照項目
このドキュメントはleafLabs, LLC.が執筆し、たま吉が翻訳・一部加筆修正したものです。