Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- class BitExchangeAdvanced
- {
- static void Main()
- {
- uint number = 0;
- try
- {
- uint n = uint.Parse(Console.ReadLine());
- number = n;
- }
- catch (OverflowException)
- {
- }
- int p = int.Parse(Console.ReadLine());
- int q = int.Parse(Console.ReadLine());
- int k = int.Parse(Console.ReadLine());
- uint mask = 1;
- uint tempNum = 0;
- bool ifOne;
- bool pGreater = p > q;
- bool outOfRange = (p + k - 1> 31) || (q + k - 1> 31);
- bool overlapping = (pGreater && (p > (q + k - 1))) || (!pGreater && (q > (p + k - 1)));
- if (outOfRange || number > uint.MaxValue)
- {
- Console.WriteLine("out of range");
- }
- else if (!overlapping)
- {
- Console.WriteLine("overlapping");
- }
- else if (!outOfRange && overlapping)
- {
- for (int i = p; i <= (p + k) - 1; i++)
- {
- ifOne = (number & (1 << i)) != 0;
- tempNum += number & (mask << i);
- if (ifOne)
- {
- number = number ^ (mask << i);
- }
- }
- for (int i = q; i <= (q + k) - 1; i++)
- {
- ifOne = (number & (1 << i)) != 0;
- tempNum += number & (mask << i);
- if (ifOne)
- {
- number = number ^ (mask << i);
- }
- }
- if (pGreater)
- {
- number = (number | (tempNum << p - q));
- number = (number | (tempNum >> p - q));
- }
- else
- {
- number = (number | (tempNum << q - p));
- number = (number | (tempNum >> q - p));
- }
- Console.WriteLine(number);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement