Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- // Write a program that exchanges bits {p, p+1, …, p+k-1} with bits {q, q+1, …, q+k-1}
- // of a given 32-bit unsigned integer. The first and the second sequence of bits may not overlap.
- class Pr16BitExchangeAdvanced
- {
- static void Main(string[] args)
- {
- Console.Write("n = ");
- uint num;
- try
- {
- num = uint.Parse(Console.ReadLine());
- }
- catch (Exception)
- {
- Console.Write("p = ");
- int bufferP = int.Parse(Console.ReadLine());
- Console.Write("q = ");
- int bufferQ = int.Parse(Console.ReadLine());
- Console.Write("k = ");
- int bufferK = int.Parse(Console.ReadLine());
- Console.WriteLine("out of range");
- return;
- throw;
- }
- Console.Write("p = ");
- int pPos = int.Parse(Console.ReadLine());
- Console.Write("q = ");
- int qPos = int.Parse(Console.ReadLine());
- Console.Write("k = ");
- int k = int.Parse(Console.ReadLine());
- if (k > 32 || (pPos + k) > 32 || (qPos + k) > 32)
- {
- Console.WriteLine("out of range");
- return;
- }
- else if (qPos < 0 || pPos < 0 || (qPos + k) < 0 || (pPos + k) < 0)
- {
- Console.WriteLine("out of range");
- return;
- }
- int biggerPos = qPos;
- int smallerPos = pPos;
- int swapPos;
- if (biggerPos < smallerPos)
- {
- swapPos = biggerPos;
- biggerPos = smallerPos;
- smallerPos = swapPos;
- }
- if ((biggerPos - smallerPos) < k)
- {
- Console.WriteLine("overlapping");
- return;
- }
- uint mask = (uint)Math.Pow(2, k) - 1;
- // konvertirane v dadena brojna sistema v i popylvane v s daden simvol
- //Console.WriteLine("Mask = {0}", Convert.ToString(mask, 2).PadLeft(k, '0'));
- uint pBits = (num >> pPos) & mask;
- //Console.WriteLine("p bits = {0}", Convert.ToString(pBits, 2).PadLeft(k, '0'));
- uint qBits = (num >> qPos) & mask;
- //Console.WriteLine("q bits = {0}", Convert.ToString(qBits, 2).PadLeft(k, '0'));
- // Reset the bits to 0
- num &= ~(mask << qPos);
- num &= ~(mask << pPos);
- // Set the bits again
- num |= pBits << qPos;
- num |= qBits << pPos;
- Console.WriteLine("result = {0}", num);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement