プロが教えるわが家の防犯対策術!

ビットデバイスM0~M100があって、隣り合うMのデバイスが同時にONした時間をタイマー等でカウントし、一定時間以上その状態が続くと警報出力したいです。
力づくでプログラムの作成はできると思うのですが、何か短いプログラムで記述する方法はないでしょうか?

A 回答 (3件)

隣り合うビット同士が両方とも1の場合には...


 if ((a & (a>>>1))!=0) ...    
integerとしての演算に許されているビット数-1 だけ同時にチェック可能です。
さらに多くのビットがある場合、シフトのためにチェック出来なかったビット分をオーバーラップさせながらチェックしていきます。
以上を基本にループさせる等の他ないと思います。

上記シフトには logical shift を仮定しています。
arithmetic shiftしかない場合 MSBはsign extendされるので注意
  if ((a & (a>>1)&0x7fff)!=0) do ... 等とする。
(left shiftの方が使いやすいかもしれない)

連続する3bit checkの場合は次のようになる。
 if ((a & (a>>>1) & (a>>>2)) != 0) do ...
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考になりました。これを元にトライしうまくいきました。

お礼日時:2009/10/14 20:51

それならソフトウェア開発手法、特に言語をうまく選ぶくらいだと思います。

良く聞くのは functional programming を使うと楽だ、という話です。たとえば ATM ならこんな報告
http://www.erlang.se/publications/Ulf_Wiger.pdf
とか。
    • good
    • 0

何のために「短いプログラム」にしたいのでしょう?



書くのがめんどうなので libray call 一発で済ませたいのですか? つまり source code が短ければ良いのでしょうか? それとも、非力な石を使うので object code を小さくしたいのでしょうか?

この回答への補足

システムが膨大でデバイスの割付もいっぱいいっぱいであるためです。実際にはM500~M1000なんですが、質問では便宜的にM0~100としました

補足日時:2009/10/14 02:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!