>>や<<という記号はシフト演算子です。
「シフト演算」とは
数値を2進数で表したときの場合の桁を、左または右に指定数ずらす(シフトする)
という演算のことです。
<<は左シフト演算子と言い、
左辺を2進数で表したときの値を、右辺で指定した桁数分だけを左にずらし、はみ出した桁数だけを右端から0を入れる
という演算をします。例えば、short int 型(2byte) の値に、5<<2という左シフト演算を行う場合は、
5 00000000 00000101
<<2
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
20 00000000 00010100
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)))
|