using System.Collections;
public class SamplesBitArray
class BitsExchangeAdvanced
Console.WriteLine("Enter number: ");
uint n = Convert.ToUInt32(Console.ReadLine());
Console.WriteLine("Enter starting position of the first bit sequence: ");
byte p = Convert.ToByte(Console.ReadLine());
Console.WriteLine("Enter starting position of the second bit sequence: ");
byte q = Convert.ToByte(Console.ReadLine());
Console.WriteLine("Enter bit sequence length: ");
sbyte k = Convert.ToSByte(Console.ReadLine());
if (Math.Max(p, q) + k > 32 || Math.Min(p, q) < 0 || Math.Min(p, q) + k < 1)
Console.WriteLine("Specified position value(s) out of range!");
if (Math.Abs(q - p) < Math.Abs(k))
Console.WriteLine("Specified length value overlaps bit sequences!");
BitArray userNumber = new BitArray(32);
BitArray mask = new BitArray(32);
byte[] x = BitConverter.GetBytes(n);
userNumber = new BitArray(x);
if (k == 1 || k == 0 || k == -1)
Console.WriteLine("No bit exchange necessary.");
for (int i = p; i <= p + k - 1; i++, j++)
mask.Set(i, userNumber.Get(j));
userNumber.Set(j, false);
for (int u = q; u <= q + k - 1; u++, v++)
mask.Set(u, userNumber.Get(v));
userNumber.Set(v, false);
for (int i = p; i >= p + k + 1; i--, j--)
mask.Set(i, userNumber.Get(j));
userNumber.Set(j, false);
for (int u = q; u >= q + k + 1; u--, v--)
mask.Set(u, userNumber.Get(v));
userNumber.Set(v, false);
BitArray final = userNumber.Xor(mask);
byte[] result = new byte[4];
uint resultNumber = BitConverter.ToUInt32(result, 0);
Console.WriteLine(resultNumber);