C#ビット演算ビット操作チュートリアル



C#では、整数演算オブジェクトをビット単位で論理演算できます.ビット毎の論理演算の意味は、被演算対象の各ビットを順次取り、論理演算を行い、各ビットの論理演算結果が結果値の各ビットである.
 
C#でサポートされているビット操作記号は次のとおりです.
 
えんざんきごう
意味
オペランドタイプ
演算結果タイプ
オブジェクト数
≪インスタンス|Instance|emdw≫
~
ビットによる逆演算
フォント
せいけい
1
~a
&
ビットロジック
演算
2
a & b
|
ビットロジック
または演算
2
a | b
^
ビットロジック
イソOR演算
2
a ^ b
<<
ビット
左シフト演算
2
a<<4
>>
ビット
右シフト演算
2
a>>2
 
各ビット演算の動作について詳しく説明します.
 
1.ビット別逆操作~
ビットによる反転操作は、シンボルビットを含む変数全体のすべてのビットを反転させます.
 class Program
    {
        static void Main(string[] args)
        {
            int number = 5;
            number = ~number;
            Console.WriteLine(number);

            int k = -5;
            number = ~k;
            Console.WriteLine(number);
        }
    }

 
出力:
-6
4
 
例:C#においてintタイプは4バイトを占め、5のバイナリコードは:
0000 0000 0000 0000 0000 0000 0000 0101

 
ビットごとに逆のバイナリコードは次のとおりです.
1111 1111 1111 1111 1111 1111 1111 1010

 
このバイナリコードはメモリに記憶されている補コードに対応し、このバイナリコードに1を減算させ、数字を表す逆コードを得る.
1111 1111 1111 1111 1111 1111 1111 1001

この逆符号からソースコードを得ることができます.一番左のは記号ビットで、生きている元のコードの時に記号ビットは逆を取らないことに注意してください.
1000 0000 0000 0000 0000 0000 0000 0110

 
この数はメモリ内で-6です.
 
同様に、-5のメモリ内の元のコードは次のとおりです.
1000 0000 0000 0000 0000 0000 0000 0101

逆符号を取得するには、次のようにします.
1111 1111 1111 1111 1111 1111 1111 1010

補完コード:
1111 1111 1111 1111 1111 1111 1111 1011

この補コードはビットによって逆に取ってから:
0000 0000 0000 0000 0000 0000 0000 0100

メモリ内では4.
 
2、ビットロジックと演算&
注意:シンボルビットは同じようにビットと操作に参加します.
ビットロジックと演算は、2つの演算オブジェクトをビット単位で演算します.演算のルール:1と1は1、1と0は0です. 
たとえば、10010001(バイナリ)&11110000は10010000(バイナリ)に等しい.
    class Program
    {
        static void Main(string[] args)
        {
            int a = 1;
            int b = 2;
            int c = a & b;
            Console.WriteLine(c);
        }
    }

 
aは、
0000 0000 0000 0000 0000 0000 0000 0001

bは、
0000 0000 0000 0000 0000 0000 0000 0010

ビット単位と後:
0000 0000 0000 0000 0000 0000 0000 0000

 
次に、シンボルビットが操作に関与する場合を例に挙げる.
 
        static void Main(string[] args)
        {
            int a = -2147483647;
            int b = 1;
            int c = a & b;
            Console.WriteLine(c);
        }

a:
1000 0000 0000 0000 0000 0000 0000 0001

a :

1111 1111 1111 1111 1111 1111 1111 1111
bのバイナリ:
0000 0000 0000 0000 0000 0000 0000 0001
ビット と は、
0000 0000 0000 0000 0000 0000 0000 0001
3、ビット または |
に、シンボルビット も まれます.
ビットロジックまたは は、2つの オブジェクトをビット でまたは します.または のルールは、1または1など1、1または0が1に しいか、
0または0は0に しい. えば10010001(バイナリ)|11110000(バイナリ)は11110001(バイナリ)に しい.
 
    class Program
    {
        static void Main(string[] args)
        {
            int a = 1;
            int b = 2;
            int c = a | b;
            Console.WriteLine(c);
        }
    }
aは、
0000 0000 0000 0000 0000 0000 0000 0001
bは、
0000 0000 0000 0000 0000 0000 0000 0010
ビット と :
0000 0000 0000 0000 0000 0000 0000 0000
aは、
0000 0000 0000 0000 0000 0000 0000 0001
bは、
0000 0000 0000 0000 0000 0000 0000 0010
ビット または :
0000 0000 0000 0000 0000 0000 0000 0011
 
4、ビット ^
に、シンボルビット も まれます.
ビット は、2つの オブジェクトをビット に します. のルールは、1 1が0に しく、
1イソまたは0は1に しく、0イソまたは0は0に しい.すなわち、 じものが0で、 じものが1である.
たとえば、10010001(バイナリ)^11110000(バイナリ)は01100001(バイナリ)に しい.
 
5、ビット シフト <<
に、シンボルビット も まれます.
ビット シフト は、 をビット に ビット シフトし、 シフト に けた 0を す. えば、8ビットのbyte
byte a=0 x 65(すなわちバイナリの01100101)を に3ビットシフト:a<<3の は0 x 27(すなわちバイナリの0001000)である.
 
        static void Main(string[] args)
        {
            int a = -2147483647;
            a = a << 2;
            Console.WriteLine(a);
        }
aのバイナリ:
0000 0000 0000 0000 0000 0000 0000 0100
      ,     :
 
0000 0000 0000 0000 0000 0000 0000 0100
は4である.
 
 
6、ビット シフト >>
 
に、シンボルビット も まれます.
ビット シフト は、 をビットごとに ビット シフトし、 シフト に いた を0とします. えば、8ビットのbyte
Byte a=0 x 65( (バイナリの01100101))を3ビット にシフト:a>>3の 、0 x 0 c(バイナリ00001100)となる.