DAY BY DAY---シフト演算---

-----シフト演算-----

>>や<<という記号はシフト演算子です。
「シフト演算」とは

数値を2進数で表したときの場合の桁を、左または右に指定数ずらす(シフトする)

という演算のことです。
<<は左シフト演算子と言い、

左辺を2進数で表したときの値を、右辺で指定した桁数分だけを左にずらし、はみ出した桁数だけを右端から0を入れる

という演算をします。例えば、short int 型(2byte) の値に、5<<2という左シフト演算を行う場合は、

5   00000000 00000101
<<2 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
20   00000000 000101
00
2進数の10100は10進数の20です。ってことは、5<<2は20になります。

 反対に>>は右シフト演算といい、左シフト演算と逆のことをします。

5   00000000 00000101
>>2 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
1   
00000000 00000001

このようにはみ出した桁数を左端から0を入れるだけです。

シフト演算を使ったものの例として、WinDef.hにあるHIWORDマクロを見てみましょう。
HIWORDの中身は、
#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
となっています。
引数と与えられた l(エル)(DWORD型)= 0000 0000 1111 1111  0000 0000 0000 0000だったとします。

l   0000 0000 1111 1111  0000 0000 0000 0000
>>16
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    
0000 0000 0000 0000  0000 0000 1111 1111
となり、10進数の255が返ってきます。

他には、DirectXのD3DCOLOR_ARBGというマクロがあります。これはビット演算も使用します。定義は下記の通りです。
#define D3DCOLOR_ARGB(a,r,g,b) ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))







戻る
 Copyright(C) 2006 DAY BY DAY. All rights reserved.