2010年
10月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

セットアップ日記


2010年10月21日 磁気センサーの改良

_ C言語の整数

AVRを使った磁気センサーのプログラムをいろいろと改良していたのだが、ときどき変な挙動をする。この原因を調べていたが、いくつか原因があったが、絶対値を計算するときにうまくいっていなかったのが、一番大きな原因だった。例えば、絶対値を求めるには次のような関数を書いたとする。
char abs(char v){
  if(v<0){v=-v;}
  return v;
}
しばらく機械語から遠ざかっていたので、気がつくのが遅れたが、これではうまくいかない場合がある。charでは、-128から127までの整数を表現することができる。そして、マイナスをつけるときには、0x100-vという計算がされる。-128は0b10000000と表現されるが、これにマイナスをつけると、0b10000000となり、128ではなく-128となってしまう。つまり、-128以外はうまく働くが、-128だけはダメなのだ。まあ、少しずつCを思い出していこう。
[]