トップ  >  リファレンス  >  基本  >  演算子・式  >  ビット演算子
スポンサーリンク
検索
カスタム検索
リファレンスツリー
オススメ

天才数学者のエドワード・オークリー・ソープの物語とジョン・ケリーの公式は必見です。
ビット演算子


ビット演算子記号 演算の種類 使用例
~ 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 );  // 0xFF00表示
    printf( "0x%04X" , ~tmp_short );  // 0x00FF表示

    tmp_short = 0xFFFF;
    printf( "0x%04X" ,  tmp_short );  // 0xFFFF表示
    printf( "0x%04X" , ~tmp_short );  // 0x0000表示

    tmp_short = 0x0000;
    printf( "0x%04X" ,  tmp_short );  // 0x0000表示
    printf( "0x%04X" , ~tmp_short );  // 0xFFFF表示

右へ論理シフト

2進数の各bitを右にシフトします。
符号無しの型であれば、右シフトによって空いたビット位置には0が入ります。
符号有りの型であれば、右シフトによって空いたビット位置には符号ビットの値が入ります。
サンプルソース:
    uint tmp_uint;                        // 符号無しの変数
    
    tmp_uint = 0xFFFF0000;                // 最上位ビットが1
    printf( "0x%08X" ,  tmp_uint      );  // 0xFFFF0000表示
    printf( "0x%08X" ,  tmp_uint >> 8 );  // 0x00FFFF00表示

    tmp_uint = 0x7FFF0000;                // 最上位ビットが0
    printf( "0x%08X" ,  tmp_uint      );  // 0x7FFF0000表示
    printf( "0x%08X" ,  tmp_uint >> 8 );  // 0x007FFF00表示


    int tmp_int;                          // 符号有りの変数
    
    tmp_int = 0xFFFF0000;                 // 最上位ビットが1(符号付きの値)
    printf( "0x%08X" ,  tmp_int      );   // 0xFFFF0000表示
    printf( "0x%08X" ,  tmp_int >> 8 );   // 0xFFFFFF00表示

    tmp_int = 0x7FFF0000;                 // 最上位ビットが0(符号無しの値)
    printf( "0x%08X" ,  tmp_int      );   // 0x7FFF0000表示
    printf( "0x%08X" ,  tmp_int >> 8 );   // 0x007FFF00表示






左へ論理シフト


2進数の各bitを左にシフトします。
左シフトによって空いたビット位置には0が入ります。

AND演算子

2進数のbitの論理積です。
x と y のビット桁で両方のビットが1の場合は1になり、0があると0になります。
サンプルソース:
    uint tmp_uint;                        
    
    tmp_uint = 0xFFFFFFFF;                
    printf( "0x%08X" ,  tmp_uint              );  // 0xFFFFFFFF表示
    printf( "0x%08X" ,  tmp_uint & 0x00FFFF00 );  // 0x00FFFF00表示

    tmp_uint = 0xFFFFFFFF;                
    printf( "0x%08X" ,  tmp_uint              );  // 0xFFFFFFFF表示
    printf( "0x%08X" ,  tmp_uint & 0x00FF7F00 );  // 0x00FF7F00表示

    tmp_uint = 0xFF7F00FF;                
    printf( "0x%08X" ,  tmp_uint              );  // 0xFF7F00FF表示
    printf( "0x%08X" ,  tmp_uint & 0x00FFFF00 );  // 0x007F0000表示

OR演算子

2進数のbitの論理和です。
x と y のビット桁でいずれかのビットが1の場合は1になり、両方が0の場合は0になります。
サンプルソース:
    uint tmp_uint;                        
    
    tmp_uint = 0xFFFFFFFF;                
    printf( "0x%08X" ,  tmp_uint              );  // 0xFFFFFFFF表示
    printf( "0x%08X" ,  tmp_uint | 0x00FFFF00 );  // 0xFFFFFFFF表示

    tmp_uint = 0x00FF0000;                
    printf( "0x%08X" ,  tmp_uint              );  // 0x00FF0000表示
    printf( "0x%08X" ,  tmp_uint | 0x0000FF00 );  // 0x00FFFF00表示

    tmp_uint = 0xFF7F00FF;                
    printf( "0x%08X" ,  tmp_uint              );  // 0xFF7F00FF表示
    printf( "0x%08X" ,  tmp_uint | 0xFFFF0000 );  // 0xFFFF00FF表示

XOR演算子

2進数のbitの排他的論理和です。
x と y のビット桁で異なる値を持つ場合に1になり、両方が同一の場合は0になります。
サンプルソース:
    uint tmp_uint;                        
    
    tmp_uint = 0xFFFFFFFF;                
    printf( "0x%08X" ,  tmp_uint              );  // 0xFFFFFFFF表示
    printf( "0x%08X" ,  tmp_uint ^ 0x00FFFF00 );  // 0xFF0000FF表示

    tmp_uint = 0x00FF0000;                
    printf( "0x%08X" ,  tmp_uint              );  // 0x00FF0000表示
    printf( "0x%08X" ,  tmp_uint ^ 0xFFFFFFFF );  // 0xFF00FFFF表示

    tmp_uint = 0xFF7F00FF;                
    printf( "0x%08X" ,  tmp_uint              );  // 0xFF7F00FF表示
    printf( "0x%08X" ,  tmp_uint ^ 0xFFFFFFFF );  // 0x0080FF00表示
スポンサーリンク



Copyright ©2015 MT4でEA自作しちゃお〜 All Rights Reserved.


Top

inserted by FC2 system