Advertisement
ToDiR0S

BitExchange

Aug 24th, 2014
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.95 KB | None | 0 0
  1. using System;
  2. class BitExchangeAdvanced
  3. {
  4.     static void Main()
  5.     {
  6.         uint number = 0;
  7.  
  8.         try
  9.         {
  10.             uint n = uint.Parse(Console.ReadLine());
  11.             number = n;
  12.         }
  13.         catch (OverflowException)
  14.         {
  15.  
  16.         }
  17.            
  18.         int p = int.Parse(Console.ReadLine());
  19.         int q = int.Parse(Console.ReadLine());
  20.         int k = int.Parse(Console.ReadLine());
  21.  
  22.         uint mask = 1;
  23.         uint tempNum = 0;
  24.         bool ifOne;
  25.         bool pGreater = p > q;
  26.         bool outOfRange = (p + k - 1> 31) || (q + k - 1> 31);
  27.         bool overlapping = (pGreater && (p > (q + k - 1))) || (!pGreater && (q > (p + k - 1)));
  28.  
  29.  
  30.         if (outOfRange || number > uint.MaxValue)
  31.         {
  32.             Console.WriteLine("out of range");
  33.         }
  34.  
  35.         else if (!overlapping)
  36.         {
  37.             Console.WriteLine("overlapping");
  38.         }
  39.  
  40.         else if (!outOfRange && overlapping)
  41.         {
  42.             for (int i = p; i <= (p + k) - 1; i++)
  43.             {
  44.                 ifOne = (number & (1 << i)) != 0;
  45.                 tempNum += number & (mask << i);
  46.  
  47.                 if (ifOne)
  48.                 {
  49.                     number = number ^ (mask << i);
  50.                 }
  51.             }
  52.  
  53.             for (int i = q; i <= (q + k) - 1; i++)
  54.             {
  55.                 ifOne = (number & (1 << i)) != 0;
  56.                 tempNum += number & (mask << i);
  57.  
  58.                 if (ifOne)
  59.                 {
  60.                     number = number ^ (mask << i);
  61.                 }
  62.             }
  63.  
  64.             if (pGreater)
  65.             {
  66.                 number = (number | (tempNum << p - q));
  67.                 number = (number | (tempNum >> p - q));
  68.             }
  69.             else
  70.             {
  71.                 number = (number | (tempNum << q - p));
  72.                 number = (number | (tempNum >> q - p));
  73.             }
  74.  
  75.             Console.WriteLine(number);
  76.         }
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement