以前のリビジョンの文書です


and , or , exor がどんな物かは理解しているのを前提で進めます。

-andマスク andマスクとは、andを使って必要な情報だけを取り出す事です。 次の章にある、ビットシフトと組み合わせると効果的です。

例えば16bitのデータ(data)のうち、真ん中の8bitだけ欲しい時(result)、次のようにすると、上手いことその部分だけを取り出す事ができます。

#highlight(){ result = data & 0x0ff0; }

この後、4bit左にシフトしておくと更にデータが扱いやすくなります。 (ビットシフトは次章参照) #highlight(){ result = (data & 0x0ff0) » 4; } または #highlight(){ result = (data » 4) & 0x0ff; }

-orで,変数の一部だけを1にする。 orを使って、変数の一部だけを1にできます。 例えば、H8-3052でP8の 0,1,2 bit をhighにしたい時は #highlight(){ P8.DR.BYTE = P8.DR.BYTE | 0x07; “|” がorの演算記号 (Shiftを押しながらBackSpaceの左にあるキーを押すと出る) }

注意しなければならないのは、元が0であろうと1であろうと関係なしに1にするという点です。 andと組み合わせて使うと大抵何でもできます。

-exor(xor)を使って特定のbitを反転させる exorは色々と難しい事が書かれていますが、ここで注目するのは、 ※ある値=0,1のいずれかとすると、

「ある値と0をexorすると結果はある値」 「ある値と1をexorすると結果はある値を反転させた値」

という性質です。 これを使えば、LEDを点滅させるプログラム等が楽に書けます。 それ以外にも色々と使い道はありますが・・・。

たとえば、3052で、P8の0,2bit目を反転させたい時 #highlight(){ P8.DR.BYTE = P8.DR.BYTE ^ 0x05; } というように書く事ができます。

以上。 ここで紹介したのは基本的な使い方なので、色々と応用できると思います。 bit演算を使う事で大幅に書く量が減ったり、実行速度が上がったりするので 使えるようになるとお得な部分だと思います。

/home/users/2/deca.jp-mice/web/cgi/dokuwiki/data/attic/and_orの使い方.1277224463.txt.gz · 最終更新: 2010/06/23 01:34 by member
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0