and , or , exor がどんな物かは理解しているのを前提で進めます。
andマスクとは、andを使って必要な情報だけを取り出す事です。
次の章にある、ビットシフトと組み合わせると効果的です。
例えば16bitのデータ(data)のうち、真ん中の8bitだけ欲しい時(result)、
次のようにすると、上手いことその部分だけを取り出す事ができます。
result = data & 0x0ff0;
この後、4bit左にシフトしておくと更にデータが扱いやすくなります。
(ビットシフトは次章参照)
result = (data & 0x0ff0) >> 4;
または
result = (data >> 4) & 0x0ff;
orを使って、変数の一部だけを1にできます。
例えば、H8-3052でP8の 0,1,2 bit をhighにしたい時は
P8.DR.BYTE = P8.DR.BYTE | 0x07; // "|" がorの演算記号 //(Shiftを押しながらBackSpaceの左にあるキーを押すと出る)
注意しなければならないのは、元が0であろうと1であろうと関係なしに1にするという点です。
andと組み合わせて使うと大抵何でもできます。
exorは色々と難しい事が書かれていますが、ここで注目するのは、
※ある値=0,1のいずれかとすると、
「ある値と0をexorすると結果はある値」
「ある値と1をexorすると結果はある値を反転させた値」
という性質です。
これを使えば、LEDを点滅させるプログラム等が楽に書けます。
それ以外にも色々と使い道はありますが・・・。
たとえば、3052で、P8の0,2bit目を反転させたい時
P8.DR.BYTE = P8.DR.BYTE ^ 0x05;
というように書く事ができます。
以上。
ここで紹介したのは基本的な使い方なので、色々と応用できると思います。
bit演算を使う事で大幅に書く量が減ったり、実行速度が上がったりするので
使えるようになるとお得な部分だと思います。