Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace _16.BitExchange_Advanced_
- {
- using System;
- class Program
- {
- static void Main()
- {
- Console.Write("Enter n : ");
- long n = long.Parse(Console.ReadLine());
- Console.Write("Enter p : ");
- sbyte p = sbyte.Parse(Console.ReadLine());
- Console.Write("Enter q : ");
- sbyte q = sbyte.Parse(Console.ReadLine());
- Console.Write("Enter k : ");
- sbyte k = sbyte.Parse(Console.ReadLine());
- if ((p + k > 32) || (q + k > 32) || p < 0 || q < 0)
- {
- Console.WriteLine("Out of range!");
- return;
- }
- if (Math.Min(p, q) + k >= Math.Max(p, q))
- {
- Console.WriteLine("Overlapping!");
- return;
- }
- int mask1 = 0;
- for (int i = 0; i < k; i++)
- {
- mask1 = mask1 * 2 + 1;
- }
- int mask2 = mask1;
- mask1 = mask1 << p;
- mask2 = mask2 << q;
- long gettingFirstBits = ((Math.Min(p, q) == p ? mask1 : mask2) & n) << Math.Max(p, q) - Math.Min(p, q);
- long gettingSecondBits = ((Math.Max(p, q) == p ? mask1 : mask2) & n) >> Math.Max(p, q) - Math.Min(p, q);
- long mask3 = ~mask1 & n;
- long mask4 = ~mask2 & n;
- n = (gettingFirstBits | gettingSecondBits) | (mask3 & mask4);
- Console.WriteLine(n);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment