こんにちは。
本日はビット演算のメモです。
左シフト[<<]
指定されたビット数分左にシフトします。
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
まとめ
慣れれば簡単ですが
最初はこんがらがって???って感じでした。
たまに使うことあるので覚えておきたいですね。
以上。