using System.Collections;
public static void Main()
var bytes = BitConverter.GetBytes(-2096229253);
var bb0 = (byte)((bytes[0] * 0x0202020202 & 0x010884422010) % 1023);
var bb1 = (byte)((bytes[1] * 0x0202020202 & 0x010884422010) % 1023);
var bb2 = (byte)((bytes[2] * 0x0202020202 & 0x010884422010) % 1023);
var bb3 = (byte)((bytes[3] * 0x0202020202 & 0x010884422010) % 1023);
bytes = new[] { bytes[1], bytes[0], bytes[3], bytes[2] };
var newbytes = new[] { bytes[3], bytes[2], bytes[1], bytes[0] };
var bits = new BitArray(bytes);
var newbitArray = new BitArray(newbytes);
Console.WriteLine("Original bits:");
for (int i = 0; i < bits.Length; i++)
Console.Write(bits[i] == false ? "0" : "1");
Console.WriteLine("Swapped bits:");
for (int i = 0; i < newbitArray.Length; i++)
Console.Write(newbitArray[i] == false ? "0" : "1");
if (newbitArray.Get(24)) b++;
if (newbitArray.Get(25)) b += 2;
if (newbitArray.Get(26)) b += 4;
if (newbitArray.Get(27)) b += 8;
if (newbitArray.Get(28)) b += 16;
if (newbitArray.Get(29)) b += 32;
if (newbitArray.Get(30)) b += 64;
if (newbitArray.Get(31)) b += 128;
Console.WriteLine("Exponent value:");
Console.WriteLine(intResult);
var result = (byte) (b >> 1);
Console.WriteLine("Right shifted exponent value:");
Console.WriteLine(intResult);
var exponentByte = (byte)intResult;
var exponentBits = new BitArray(new byte[] { exponentByte });
for (int i = 31; i >= 23; i--)
newbitArray.Set(i, false);
newbitArray.Set(i, exponentBits[index--]);
if (newbitArray.Get(23)) b++;
if (newbitArray.Get(24)) b += 2;
if (newbitArray.Get(25)) b += 4;
if (newbitArray.Get(26)) b += 8;
if (newbitArray.Get(27)) b += 16;
if (newbitArray.Get(28)) b += 32;
if (newbitArray.Get(29)) b += 64;
if (newbitArray.Get(30)) b += 128;
Console.WriteLine("Exponent minus 2:");
Console.WriteLine(intResult);
exponentByte = (byte)intResult;
exponentBits = new BitArray(new byte[] { exponentByte });
for (int i = 31; i >= 23; i--)
newbitArray.Set(i, false);
newbitArray.Set(i, exponentBits[index--]);
Console.WriteLine("Final bit array:");
for (int i = 0; i < newbitArray.Length; i++)
Console.Write(newbitArray[i] == false ? "0" : "1");
byte[] newBytes = new byte[4];
newbitArray.CopyTo(newBytes, 0);
var answer = BitConverter.ToSingle(newBytes, 0);
Console.WriteLine("Final result:");
Console.WriteLine(answer);
byte[] newArray = new[] { newBytes[2], newBytes[3], newBytes[0], newBytes[1] };
Console.WriteLine( BitConverter.ToSingle(newArray, 0));