なんだかGoodVibes

日々の勉強メモです。

【C#】ビット演算メモ

こんにちは。
本日はビット演算のメモです。


左シフト[<<]

指定されたビット数分左にシフトします。

uint before = 0b_1111_1111;

var after = before << 3;
Console.WriteLine($"after = {Convert.ToString(after, toBase:2)}");


結果は以下。

after = 11111111000


右シフト[>>]

指定されたビット数分右にシフトします。

uint before = 0b_1111_1111;

var after = before >> 3;
Console.WriteLine($"after = {Convert.ToString(after, toBase:2)}");


結果は以下。

after = 11111


論理AND演算[&]

各ビットで、どちらも1だった場合に1となります。

uint num1 = 0b_1010_1010;
uint num2 = 0b_0101_1111;

var after = num1 & num2;
Console.WriteLine($"num1 & num2 = {Convert.ToString(after, toBase:2)}");


結果は以下。

num1 & num2 = 1010


論理OR演算子[|]

各ビットで、どちらかが1であった場合に1となります。

uint num1 = 0b_1010_1010;
uint num2 = 0b_0101_1111;

var after = num1 | num2;
Console.WriteLine($"num1 | num2 = {Convert.ToString(after, toBase:2)}");


結果は以下。

num1 | num2 = 11111111


論理排他的OR演算子[^]

各ビットで、同じ場合は0、異なっている場合は1となります。

uint num1 = 0b_1010_1010;
uint num2 = 0b_0101_1111;

var after = num1 ^ num2;
Console.WriteLine($"num1 ^ num2 = {Convert.ToString(after, toBase:2)}");


結果は以下。

num1 ^ num2 = 11110101


まとめ

慣れれば簡単ですが
最初はこんがらがって???って感じでした。
たまに使うことあるので覚えておきたいですね。
以上。