Advertisement
Guest User

BitExchangeAdvanced

a guest
Mar 18th, 2014
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.27 KB | None | 0 0
  1. class BitExchangeAdvanced
  2.     {
  3.         static void Main()
  4.         {
  5.             Console.Write("N = ");
  6.             long numberN = long.Parse(Console.ReadLine());
  7.             Console.Write("P = ");
  8.             int bitP = int.Parse(Console.ReadLine());
  9.             Console.Write("Q = ");
  10.             int bitQ = int.Parse(Console.ReadLine());
  11.             Console.Write("K = ");
  12.             int lengthK = int.Parse(Console.ReadLine());
  13.             int distance = Math.Abs(bitP - bitQ);
  14.  
  15.             if ((numberN > 4294967295) | (bitP + lengthK > 32) | (bitQ + lengthK > 32) |
  16.                     (bitP > 31 | bitQ > 31) | (bitP < 0 | bitQ < 0))
  17.             {
  18.                 Console.WriteLine("out of range");
  19.                 Main();
  20.             }
  21.             uint number = (uint) numberN;
  22.             if (distance >= lengthK)
  23.             {
  24.                 uint unit = (1u << lengthK) - 1;  //2^k-1
  25.                 uint mask1 = ((unit << bitP) | (unit << bitQ)) & number;
  26.                 uint mask2 = (mask1 << distance) | (mask1 >> distance);
  27.                 uint result = (number & (~mask1)) | mask2;
  28.                 Console.WriteLine(result);
  29.             }
  30.             else
  31.             {
  32.                 Console.WriteLine("overlapping");
  33.             }
  34.         }
  35.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement