Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- class AdvancedBitExchange
- {
- static void Main()
- {
- Console.Write("Please input a number : ");
- string userInput = Console.ReadLine(); // is input number uint?
- uint input;
- if (!uint.TryParse(userInput, out input))
- {
- Console.WriteLine("Invalid input!");
- return;
- } // is input number uint?
- Console.Write("enter beginning of first bit range (p): ");
- int firstBitGroupStartPosition = int.Parse(Console.ReadLine());
- Console.Write("enter beginning of second bit range (q): ");
- int secondBitGroupStartPosition = int.Parse(Console.ReadLine());
- Console.Write("enter bit length for consecutive bits (k): ");
- int bitGroupLength = int.Parse(Console.ReadLine());
- int bitGroupsDistance = Math.Abs(firstBitGroupStartPosition - secondBitGroupStartPosition);
- if (bitGroupsDistance < bitGroupLength)
- {
- Console.WriteLine("overlapping");
- return;
- }
- int outOfRange = Math.Max(firstBitGroupStartPosition, secondBitGroupStartPosition);
- if (outOfRange + bitGroupLength > 32) //Max(p,q) + k should be 32 at most.
- {
- Console.WriteLine("out of range");
- return;
- }
- // || START OF THE ACTUAL PROGRAM ||
- // Calculate a number with k times '1's to use later as a mask :
- uint maskTemplate = (UInt32)Convert.ToInt32(Math.Pow(2.0, (double)bitGroupLength) - 1);
- uint maskFirstBits = maskTemplate << firstBitGroupStartPosition;
- uint maskSecondBits = maskTemplate << secondBitGroupStartPosition;
- uint firstBitGroup = input & maskFirstBits;
- uint secondBitGroup = input & maskSecondBits;
- uint makeZeroFirstBitGroupOfInput = input & ~maskFirstBits;
- uint makeZeroSecondBitGroupOfInput = input & ~maskSecondBits;
- uint inputWithBitsOfInterestToZero = makeZeroFirstBitGroupOfInput & makeZeroSecondBitGroupOfInput;
- if (firstBitGroupStartPosition >= secondBitGroupStartPosition)
- {
- uint output = (inputWithBitsOfInterestToZero | firstBitGroup >> (bitGroupsDistance)) | (secondBitGroup << bitGroupsDistance);
- Console.WriteLine("The result is: " + output);
- }
- else
- {
- uint output = (inputWithBitsOfInterestToZero | firstBitGroup << (bitGroupsDistance)) | (secondBitGroup >> bitGroupsDistance);
- Console.WriteLine("The result is: " + output);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement