変数の範囲チェック
ある変数の取れる値を制限したい場合がある。
int x; // xにいろんな処理 // xの値を0 〜 255に制限 if( x > 255 ) x = 255; if x < 0 ) x = 0;
いちいち上のようなコードを書くのはくたびれるので、こんなマクロを用意しておくと役立つ
#define RANGE_CHECK(x,min,max) ((x= (x<min ? min : x<max ? x : max)))
上限、または下限を制限したいだけなら
// 上限を255に制限 x = std::min( x, 255 ); // 下限を0に制限 x = std::max( x, 0 );
><
ところで、こういう処理をしたい場合には、変数の型は変数の取りうる値より大きくとっておく必要がある。例えば値の範囲が0〜255だからといってunsigned char型を使ってしまうと・・・
unsigned char c; // cにいろんな処理 // だめぽ if( c > 255 ) c = 255; if c < 0 ) c = 0;
当然、このコードは期待したとおりに動かない。これに気づかずハマったことが何度も・・(ry
>
ループする変数
オイラー角みたいに360まで行ったら0に戻るという処理に剰余を用いるテクニック。
http://www.cranehouse.jp/program/other.html
大変参考になりました。