【Arduino,C】文字宣言時にオーバーフロー?
オーバーフローといっていいのかよくわからないけど
文字宣言のところで変数の意味が分かるように掛け算で数値を代入したとき,具体的には
unsigned long time_millisec = 135 * 1000 //msec
としてミリ秒にするため1000をかけて代入したところなぜか代入された変数は
println(time_millisec)
> 3928
なってどハマリした。
よくよく調べると整数の定数はint型なので
int(135) * 1000
135000だけどintは2byte(65536)なので2周回って
13500 - 65536 = 69464 ←まだint型より大きい
69464 - 65536 = 3928
となってしまった。
これは普通に
unsigned long time_millisec = 135000
とすれば起きない現象。
要注意。
こちらが参考になりました↓
Arduino 日本語リファレンス