ビット演算子記号 |
演算の種類 |
使用例 |
~ |
1の補数 |
a = ~b; |
>> |
右へ論理シフト |
a = a >> b; |
<< |
左へ論理シフト |
a = a << b; |
& |
AND演算子 |
a = a & b; |
| |
OR演算子 |
a = a | b; |
^ |
XOR演算子 |
a = a ^ b; |
ビット演算子は
整数に対してのみ実行されます。
1の補数
2進数の各bitの1と0を反転する。
サンプルソース:
ushort tmp_short;
tmp_short = 0xFF00;
printf( "0x%04X" , tmp_short );
printf( "0x%04X" , ~tmp_short );
tmp_short = 0xFFFF;
printf( "0x%04X" , tmp_short );
printf( "0x%04X" , ~tmp_short );
tmp_short = 0x0000;
printf( "0x%04X" , tmp_short );
printf( "0x%04X" , ~tmp_short );
右へ論理シフト
2進数の各bitを右にシフトします。
符号無しの型であれば、右シフトによって空いたビット位置には0が入ります。
符号有りの型であれば、右シフトによって空いたビット位置には符号ビットの値が入ります。
サンプルソース:
uint tmp_uint;
tmp_uint = 0xFFFF0000;
printf( "0x%08X" , tmp_uint );
printf( "0x%08X" , tmp_uint >> 8 );
tmp_uint = 0x7FFF0000;
printf( "0x%08X" , tmp_uint );
printf( "0x%08X" , tmp_uint >> 8 );
int tmp_int;
tmp_int = 0xFFFF0000;
printf( "0x%08X" , tmp_int );
printf( "0x%08X" , tmp_int >> 8 );
tmp_int = 0x7FFF0000;
printf( "0x%08X" , tmp_int );
printf( "0x%08X" , tmp_int >> 8 );
左へ論理シフト
2進数の各bitを左にシフトします。
左シフトによって空いたビット位置には0が入ります。
AND演算子
2進数のbitの論理積です。
x と y のビット桁で両方のビットが1の場合は1になり、0があると0になります。
サンプルソース:
uint tmp_uint;
tmp_uint = 0xFFFFFFFF;
printf( "0x%08X" , tmp_uint );
printf( "0x%08X" , tmp_uint & 0x00FFFF00 );
tmp_uint = 0xFFFFFFFF;
printf( "0x%08X" , tmp_uint );
printf( "0x%08X" , tmp_uint & 0x00FF7F00 );
tmp_uint = 0xFF7F00FF;
printf( "0x%08X" , tmp_uint );
printf( "0x%08X" , tmp_uint & 0x00FFFF00 );
OR演算子
2進数のbitの論理和です。
x と y のビット桁でいずれかのビットが1の場合は1になり、両方が0の場合は0になります。
サンプルソース:
uint tmp_uint;
tmp_uint = 0xFFFFFFFF;
printf( "0x%08X" , tmp_uint );
printf( "0x%08X" , tmp_uint | 0x00FFFF00 );
tmp_uint = 0x00FF0000;
printf( "0x%08X" , tmp_uint );
printf( "0x%08X" , tmp_uint | 0x0000FF00 );
tmp_uint = 0xFF7F00FF;
printf( "0x%08X" , tmp_uint );
printf( "0x%08X" , tmp_uint | 0xFFFF0000 );
XOR演算子
2進数のbitの排他的論理和です。
x と y のビット桁で異なる値を持つ場合に1になり、両方が同一の場合は0になります。
サンプルソース:
uint tmp_uint;
tmp_uint = 0xFFFFFFFF;
printf( "0x%08X" , tmp_uint );
printf( "0x%08X" , tmp_uint ^ 0x00FFFF00 );
tmp_uint = 0x00FF0000;
printf( "0x%08X" , tmp_uint );
printf( "0x%08X" , tmp_uint ^ 0xFFFFFFFF );
tmp_uint = 0xFF7F00FF;
printf( "0x%08X" , tmp_uint );
printf( "0x%08X" , tmp_uint ^ 0xFFFFFFFF );