Advertisement
kyamaliev

C#Basics HW3 - Problem 16 Advanced Bit Exchange

Mar 24th, 2014
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.33 KB | None | 0 0
  1. using System;
  2. class AdvancedBitExchange
  3. {
  4.     static void Main()
  5.     {
  6.         Console.Write("Please input a number : ");
  7.         string userInput = Console.ReadLine();                                                          // is input number uint?
  8.         uint input;                                                                                
  9.         if (!uint.TryParse(userInput, out input))                                                          
  10.         {
  11.             Console.WriteLine("Invalid input!");                                                        
  12.             return;
  13.         }                                                                                               // is input number uint?
  14.         Console.Write("enter beginning of first bit range (p): ");
  15.         int firstBitGroupStartPosition = int.Parse(Console.ReadLine());
  16.         Console.Write("enter beginning of second bit range (q): ");
  17.         int secondBitGroupStartPosition = int.Parse(Console.ReadLine());
  18.         Console.Write("enter bit length for consecutive bits (k): ");
  19.         int bitGroupLength = int.Parse(Console.ReadLine());
  20.        
  21.     int bitGroupsDistance = Math.Abs(firstBitGroupStartPosition - secondBitGroupStartPosition);
  22.         if (bitGroupsDistance < bitGroupLength)
  23.         {
  24.             Console.WriteLine("overlapping");
  25.             return;
  26.         }                                                                                              
  27.         int outOfRange = Math.Max(firstBitGroupStartPosition, secondBitGroupStartPosition);            
  28.         if (outOfRange + bitGroupLength > 32) //Max(p,q) + k should be 32 at most.
  29.         {
  30.             Console.WriteLine("out of range");
  31.             return;
  32.         }                                                                
  33.         // || START OF THE ACTUAL PROGRAM ||                      
  34.     // Calculate a number with k times '1's to use later as a mask :
  35.     uint maskTemplate = (UInt32)Convert.ToInt32(Math.Pow(2.0, (double)bitGroupLength) - 1);                
  36.         uint maskFirstBits = maskTemplate << firstBitGroupStartPosition;                          
  37.         uint maskSecondBits = maskTemplate << secondBitGroupStartPosition;                                      
  38.         uint firstBitGroup = input & maskFirstBits;                                                    
  39.         uint secondBitGroup = input & maskSecondBits;
  40.         uint makeZeroFirstBitGroupOfInput = input & ~maskFirstBits;                                    
  41.         uint makeZeroSecondBitGroupOfInput = input & ~maskSecondBits;
  42.         uint inputWithBitsOfInterestToZero = makeZeroFirstBitGroupOfInput & makeZeroSecondBitGroupOfInput;
  43.         if (firstBitGroupStartPosition >= secondBitGroupStartPosition)                                  
  44.         {                                                                                              
  45.             uint output = (inputWithBitsOfInterestToZero | firstBitGroup >> (bitGroupsDistance)) | (secondBitGroup << bitGroupsDistance);
  46.             Console.WriteLine("The result is: " + output);
  47.         }
  48.         else
  49.         {
  50.             uint output = (inputWithBitsOfInterestToZero | firstBitGroup << (bitGroupsDistance)) | (secondBitGroup >> bitGroupsDistance);
  51.             Console.WriteLine("The result is: " + output);
  52.         }
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement