この文書の現在のバージョンと選択したバージョンの差分を表示します。
and_orの使い方 [2010/06/23 01:34] member 作成 |
and_orの使い方 [2010/06/23 01:40] (現在) member |
||
---|---|---|---|
ライン 2: | ライン 2: | ||
- | -andマスク | + | =====andマスク===== |
- | andマスクとは、andを使って必要な情報だけを取り出す事です。 | + | andマスクとは、andを使って必要な情報だけを取り出す事です。\\ |
- | 次の章にある、ビットシフトと組み合わせると効果的です。 | + | 次の章にある、ビットシフトと組み合わせると効果的です。\\ |
- | 例えば16bitのデータ(data)のうち、真ん中の8bitだけ欲しい時(result)、次のようにすると、上手いことその部分だけを取り出す事ができます。 | + | 例えば16bitのデータ(data)のうち、真ん中の8bitだけ欲しい時(result)、\\ |
+ | 次のようにすると、上手いことその部分だけを取り出す事ができます。\\ | ||
- | #highlight(){ | + | <code c> |
result = data & 0x0ff0; | result = data & 0x0ff0; | ||
- | } | + | </code> |
- | この後、4bit左にシフトしておくと更にデータが扱いやすくなります。 | + | この後、4bit左にシフトしておくと更にデータが扱いやすくなります。\\ |
- | (ビットシフトは次章参照) | + | (ビットシフトは次章参照)\\ |
- | #highlight(){ | + | <code c> |
result = (data & 0x0ff0) >> 4; | result = (data & 0x0ff0) >> 4; | ||
- | } | + | </code> |
- | または | + | |
- | #highlight(){ | + | または\\ |
+ | <code c> | ||
result = (data >> 4) & 0x0ff; | result = (data >> 4) & 0x0ff; | ||
- | } | + | </code> |
- | + | =====orで書き込む===== | |
- | + | orを使って、変数の一部だけを1にできます。\\ | |
- | -orで,変数の一部だけを1にする。 | + | 例えば、H8-3052でP8の 0,1,2 bit をhighにしたい時は\\ |
- | orを使って、変数の一部だけを1にできます。 | + | <code c> |
- | 例えば、H8-3052でP8の 0,1,2 bit をhighにしたい時は | + | |
- | #highlight(){ | + | |
P8.DR.BYTE = P8.DR.BYTE | 0x07; | P8.DR.BYTE = P8.DR.BYTE | 0x07; | ||
// "|" がorの演算記号 | // "|" がorの演算記号 | ||
//(Shiftを押しながらBackSpaceの左にあるキーを押すと出る) | //(Shiftを押しながらBackSpaceの左にあるキーを押すと出る) | ||
- | } | + | </code> |
- | 注意しなければならないのは、元が0であろうと1であろうと関係なしに1にするという点です。 | + | 注意しなければならないのは、元が0であろうと1であろうと関係なしに1にするという点です。\\ |
- | andと組み合わせて使うと大抵何でもできます。 | + | andと組み合わせて使うと大抵何でもできます。\\ |
- | -exor(xor)を使って特定のbitを反転させる | + | =====exor(xor)で反転させる===== |
- | exorは色々と難しい事が書かれていますが、ここで注目するのは、 | + | exorは色々と難しい事が書かれていますが、ここで注目するのは、\\ |
- | ※ある値=0,1のいずれかとすると、 | + | ※ある値=0,1のいずれかとすると、\\ |
- | 「ある値と0をexorすると結果はある値」 | + | 「ある値と0をexorすると結果はある値」\\ |
- | 「ある値と1をexorすると結果はある値を反転させた値」 | + | 「ある値と1をexorすると結果はある値を反転させた値」\\ |
- | という性質です。 | + | という性質です。\\ |
- | これを使えば、LEDを点滅させるプログラム等が楽に書けます。 | + | これを使えば、LEDを点滅させるプログラム等が楽に書けます。\\ |
- | それ以外にも色々と使い道はありますが・・・。 | + | それ以外にも色々と使い道はありますが・・・。\\ |
- | たとえば、3052で、P8の0,2bit目を反転させたい時 | + | たとえば、3052で、P8の0,2bit目を反転させたい時\\ |
- | #highlight(){ | + | <code c> |
P8.DR.BYTE = P8.DR.BYTE ^ 0x05; | P8.DR.BYTE = P8.DR.BYTE ^ 0x05; | ||
- | } | + | </code> |
- | というように書く事ができます。 | + | というように書く事ができます。\\ |
- | + | \\ | |
- | + | \\ | |
- | + | \\ | |
- | 以上。 | + | 以上。\\ |
- | ここで紹介したのは基本的な使い方なので、色々と応用できると思います。 | + | ここで紹介したのは基本的な使い方なので、色々と応用できると思います。\\ |
- | bit演算を使う事で大幅に書く量が減ったり、実行速度が上がったりするので | + | bit演算を使う事で大幅に書く量が減ったり、実行速度が上がったりするので\\ |
- | 使えるようになるとお得な部分だと思います。 | + | 使えるようになるとお得な部分だと思います。\\ |