Translate

2009年11月7日土曜日

関数(7) ビット単位のシフト演算(2)

[実験 MikroC Pro PIC16F84A_LED_0025]

PORTBのLEDをビット単位のシフト演算を使って1bit、2bit、3bit、4bit
左へシフトまたは右へシフトするプログラムを考えなさい。










x = (x<<1 data-blogger-escaped-1bit="" data-blogger-escaped-br="">x = (x>>1); // 1bit右へシフト
x = (x<<2 data-blogger-escaped-2bit="" data-blogger-escaped-br="">x = (x>>2); // 2bit右へシフト
x = (x<<3 data-blogger-escaped-3bit="" data-blogger-escaped-br="">x = (x>>3); // 3bit右へシフト
x = (x<<4 data-blogger-escaped-4bit="" data-blogger-escaped-br="">x = (x>>4); // 4bit右へシフト









X = 0xFF で x<<2 data-blogger-escaped-br="">上図のように2Bitづつ左へシフトしていきます。
この時、右側の空いたBitには「0」が埋められていきます。


x<<2 data-blogger-escaped-0xff="" data-blogger-escaped-br="">すべて0になっています。
それ以降1になることはありません。LEDは点灯しません。
そこでif文でシフトエンド処理をして同じパターンで繰り返されるようにしています。


ビット単位のシフト演算は、
負の値のシフトやビット数以上のシフトを行ってはいけません。






mikroC PRO for PIC

0 件のコメント:

コメントを投稿