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)となる.