Advertisement
Guest User

Pr16BitExchangeAdvanced

a guest
Jul 21st, 2015
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.50 KB | None | 0 0
  1. using System;
  2.  
  3. // Write a program that exchanges bits {p, p+1, …, p+k-1} with bits {q, q+1, …, q+k-1}
  4. // of a given 32-bit unsigned integer. The first and the second sequence of bits may not overlap.
  5.  
  6. class Pr16BitExchangeAdvanced
  7. {
  8.     static void Main(string[] args)
  9.     {
  10.         Console.Write("n = ");
  11.         uint num;
  12.         try
  13.         {
  14.             num = uint.Parse(Console.ReadLine());
  15.         }
  16.         catch (Exception)
  17.         {
  18.             Console.Write("p = ");
  19.             int bufferP = int.Parse(Console.ReadLine());
  20.             Console.Write("q = ");
  21.             int bufferQ = int.Parse(Console.ReadLine());
  22.             Console.Write("k = ");
  23.             int bufferK = int.Parse(Console.ReadLine());
  24.             Console.WriteLine("out of range");
  25.             return;
  26.             throw;
  27.         }
  28.         Console.Write("p = ");
  29.         int pPos = int.Parse(Console.ReadLine());
  30.         Console.Write("q = ");
  31.         int qPos = int.Parse(Console.ReadLine());
  32.         Console.Write("k = ");
  33.         int k = int.Parse(Console.ReadLine());
  34.  
  35.         if (k > 32 || (pPos + k) > 32 || (qPos + k) > 32)
  36.         {
  37.             Console.WriteLine("out of range");
  38.             return;
  39.         }
  40.  
  41.         else if (qPos < 0 || pPos < 0 || (qPos + k) < 0 || (pPos + k) < 0)
  42.         {
  43.             Console.WriteLine("out of range");
  44.             return;
  45.         }
  46.  
  47.         int biggerPos = qPos;
  48.         int smallerPos = pPos;
  49.         int swapPos;
  50.         if (biggerPos < smallerPos)
  51.         {
  52.             swapPos = biggerPos;
  53.             biggerPos = smallerPos;
  54.             smallerPos = swapPos;
  55.         }
  56.  
  57.         if ((biggerPos - smallerPos) < k)
  58.         {
  59.             Console.WriteLine("overlapping");
  60.             return;
  61.         }
  62.  
  63.         uint mask = (uint)Math.Pow(2, k) - 1;
  64.         // konvertirane v dadena brojna sistema                  v i popylvane  v s daden simvol
  65.         //Console.WriteLine("Mask = {0}", Convert.ToString(mask, 2).PadLeft(k, '0'));
  66.         uint pBits = (num >> pPos) & mask;
  67.         //Console.WriteLine("p bits = {0}", Convert.ToString(pBits, 2).PadLeft(k, '0'));
  68.         uint qBits = (num >> qPos) & mask;
  69.         //Console.WriteLine("q bits = {0}", Convert.ToString(qBits, 2).PadLeft(k, '0'));
  70.  
  71.         // Reset the bits to 0
  72.         num &= ~(mask << qPos);
  73.         num &= ~(mask << pPos);
  74.  
  75.         // Set the bits again
  76.         num |= pBits << qPos;
  77.         num |= qBits << pPos;
  78.  
  79.         Console.WriteLine("result = {0}", num);
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement