俺言語。

自分にしか理解できない言語で書かれた備忘録

【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 日本語リファレンス