From 03642a4aea05642e9a531f44d5f18805cc75fe1b Mon Sep 17 00:00:00 2001 From: Louis Gallet Date: Thu, 14 Mar 2024 17:46:33 +0100 Subject: [PATCH] feat: :sparkles: Made some bit shift (just to say) --- Marokanar/Program.cs | 19 ++++- Marokanar/SmurfByte.cs | 155 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 Marokanar/SmurfByte.cs diff --git a/Marokanar/Program.cs b/Marokanar/Program.cs index e5dff12..efeaf91 100644 --- a/Marokanar/Program.cs +++ b/Marokanar/Program.cs @@ -1,3 +1,20 @@ // See https://aka.ms/new-console-template for more information -Console.WriteLine("Hello, World!"); \ No newline at end of file +using Marokanar; + +Console.WriteLine("Hello, World!"); +SmurfByte sb = new SmurfByte(213); +SmurfByte sb2 = new SmurfByte(148); +SmurfByte sbOr = sb ^ sb2; +Console.WriteLine(sbOr); // "11111101" +Console.WriteLine(sb2); // "00011100" +Console.WriteLine(sb); // "11100001" + + + + + + + + +Console.Write("Finished"); \ No newline at end of file diff --git a/Marokanar/SmurfByte.cs b/Marokanar/SmurfByte.cs new file mode 100644 index 0000000..aae01bf --- /dev/null +++ b/Marokanar/SmurfByte.cs @@ -0,0 +1,155 @@ +namespace Marokanar; + +public class SmurfByte +{ + private bool[] _sbits = new bool[8]; + + public SmurfByte(byte b) + { + int power = 1; + for (int i = 7; i >= 0; i--) + { + _sbits[i] = (b & power) != 0; + power *= 2; + } + } + + public bool GetBit(int i) + { + if (i < 0 || i > 7) + { + throw new ArgumentException(); + } + else + { + int len = _sbits.Length - 1; + return _sbits[len - i]; + } + } + + public void SetBit(int i, bool val) + { + if (i < 0 || i > 7) + { + throw new ArgumentException(); + } + + _sbits[^(i + 1)] = val; + } + + public override string ToString() + { + string result = String.Empty; + foreach (var element in _sbits) + { + if (element == false) + { + result += "0"; + } + else + { + result += "1"; + } + } + + return result; + } + + public static SmurfByte operator ~(SmurfByte smurfbyte) + { + SmurfByte newSmurfByte = new SmurfByte(0); + for (int i = 0; i < smurfbyte._sbits.Length; i++) + { + newSmurfByte._sbits[i] = !(smurfbyte._sbits[i]); + } + + return newSmurfByte; + } + + public static SmurfByte operator <<(SmurfByte smurfByte, int n) + { + SmurfByte newSmurfByte = new SmurfByte(0); + for (int i = 0; i < smurfByte._sbits.Length - n; i++) + { + newSmurfByte.SetBit(i + n, smurfByte.GetBit(i)); + } + + return newSmurfByte; + } + + public static SmurfByte operator >> (SmurfByte smurfByte, int n) + { + SmurfByte result = new SmurfByte(0); + for (int i = smurfByte._sbits.Length - 1; i>= n; i--) + { + result.SetBit(i-n, smurfByte.GetBit(i)); + } + + return result; + } + + public static SmurfByte operator |(SmurfByte smurfByte1, SmurfByte smurfByte2) + { + SmurfByte result = new SmurfByte(0); + for (int i = 0; i < smurfByte1._sbits.Length; i++) + { + if (smurfByte1.GetBit(i) == true && smurfByte2.GetBit(i) == true) + { + result.SetBit(i, true); + } + + else if (smurfByte1.GetBit(i) == true || smurfByte2.GetBit(i) == true) + { + result.SetBit(i, true); + } + else + { + result.SetBit(i, false); + } + } + + return result; + } + + public static SmurfByte operator &(SmurfByte smurfByte1, SmurfByte smurfByte2) + { + SmurfByte result = new SmurfByte(0); + for (int i = 0; i < smurfByte1._sbits.Length; i++) + { + if (smurfByte1.GetBit(i) == true && smurfByte2.GetBit(i) == true) + { + result.SetBit(i, true); + } + else + { + result.SetBit(i, false); + } + } + + return result; + } + + public static SmurfByte operator ^(SmurfByte smurfByte1, SmurfByte smurfByte2) + { + SmurfByte result = new SmurfByte(0); + for (int i = 0; i < smurfByte1._sbits.Length; i++) + { + if (smurfByte1.GetBit(i) == true && smurfByte2.GetBit(i) == false) + { + result.SetBit(i, true); + } + else if (smurfByte1.GetBit(i) == false && smurfByte2.GetBit(i) == true) + { + result.SetBit(i, true); + } + else + { + result.SetBit(i, false); + } + } + + return result; + } + + +} \ No newline at end of file