Advertisement
funbun

Bit Exchange (Advanced)

Nov 18th, 2014
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.41 KB | None | 0 0
  1. using System;
  2. using System.Numerics;
  3.  
  4. class BitsExchangeAdvanced
  5. {
  6.     static void Main()
  7.     {
  8.         long number = long.Parse(Console.ReadLine());
  9.         Console.WriteLine(Convert.ToString(number, 2).PadLeft(32, '0'));
  10.  
  11.         int firstSequenceBit = int.Parse(Console.ReadLine());
  12.         int secondSequenceBit = int.Parse(Console.ReadLine());
  13.         int howManyBits = int.Parse(Console.ReadLine());
  14.         long firstResult = 0;
  15.         long secondResult = 0;
  16.  
  17.         if (Math.Max(firstSequenceBit, secondSequenceBit) + howManyBits > 32 ||
  18.             Math.Min(firstSequenceBit, secondSequenceBit) < 0)
  19.         {
  20.             Console.WriteLine("out of range");
  21.             return;
  22.         }
  23.         if (Math.Abs(secondSequenceBit - firstSequenceBit) < howManyBits)
  24.         {
  25.             Console.WriteLine("overlapping");
  26.             return;
  27.         }
  28.         for (int i = firstSequenceBit, j = secondSequenceBit;
  29.             i < (firstSequenceBit + howManyBits) || j < (secondSequenceBit + howManyBits);
  30.             i++, j++)
  31.         {
  32.             long mask1 = 1;
  33.             mask1 = mask1 << i;
  34.             firstResult = (mask1 & number) >> i;
  35.  
  36.             long mask2 = 1;
  37.             mask2 = mask2 << j;
  38.             secondResult = (mask2 & number) >> j;
  39.  
  40.             if (firstResult == 0 && secondResult == 1)
  41.             {
  42.                 number = mask1 | number;
  43.                 number = ~mask2 & number;
  44.             }
  45.             else if (firstResult == 1 && secondResult == 0)
  46.             {
  47.                 number = ~mask1 & number;
  48.                 number = mask2 | number;
  49.             }
  50.         }
  51.         Console.WriteLine(Convert.ToString(number, 2).PadLeft(32, '0'));
  52.         Console.WriteLine(number);
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement