fbinnzhivko

Bit Builder 02.

Mar 17th, 2016
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.66 KB | None | 0 0
  1. using System;
  2.  
  3. namespace _5.BitBuilder
  4. {
  5.     class BitBuilder
  6.     {
  7.         static void Main()
  8.         {
  9.  
  10.             bool check = true;
  11.             long newNumber = 0;
  12.             string input = Console.ReadLine();
  13.  
  14.             if (input == "quit")
  15.             {
  16.                 Console.WriteLine(newNumber);
  17.                 check = false;
  18.                 System.Environment.Exit(-1);
  19.             }
  20.             else
  21.             {
  22.                 newNumber = long.Parse(input);
  23.             }
  24.  
  25.             do
  26.             {
  27.                 input = Console.ReadLine();
  28.  
  29.                 if (input == "quit")
  30.                 {
  31.                     Console.WriteLine(newNumber);
  32.                     check = false;
  33.                     System.Environment.Exit(-1);
  34.                 }
  35.                 else
  36.                 {
  37.                     int position = int.Parse(input);
  38.                     string manipulation = Console.ReadLine();
  39.  
  40.                     switch (manipulation)
  41.                     {
  42.                         case "flip":
  43.                             newNumber = flipBit(newNumber, position);
  44.                             break;
  45.                         case "insert":
  46.                             newNumber = insertBit(newNumber, position);
  47.                             break;
  48.                         case "remove":
  49.                             newNumber = removeBit(newNumber, position);
  50.                             break;
  51.                     }
  52.                 }
  53.             }
  54.             while (check);
  55.         }
  56.  
  57.  
  58.  
  59.         private static long flipBit(long number, int position)
  60.         {
  61.             long tempMask = (long)1 << position;
  62.             long result = number ^ tempMask;
  63.             return result;
  64.         }
  65.  
  66.         private static long removeBit(long number, int position) // 123, 3
  67.         {
  68.                                                            // 0111 1011
  69.             long mask = bitMaskFromN(position - 1);        // 0000 0111
  70.             long tempNumber = mask & number;               // 0000 0011
  71.  
  72.             number = number >> position + 1;               // 0000 0111
  73.             number = number << position;                   // 0011 1000
  74.             number = number | tempNumber;                  // 0011 1011
  75.             return number;
  76.         }
  77.  
  78.         private static long insertBit(long number, int position) // 123, 3
  79.         {
  80.                                                            //     0111 1011
  81.             long mask = bitMaskFromN(position - 1);        //     0000 0111
  82.             long invertMask = invertBitMasks(mask);        // (1) 1111 1000
  83.             long tempMask = (long)1 << position;           //     0000 1000
  84.             long tempNumber = mask & number;               //     0000 0011
  85.  
  86.             number = invertMask & number;                  //     0111 1000
  87.             number = number << 1;                          //     1111 0000
  88.             number = number | tempMask;                    //     1111 1000
  89.             number = number | tempNumber;                  //     1111 1011
  90.             return number;
  91.         }
  92.  
  93.         public static long bitMaskFromN(int position)
  94.         {
  95.             if (position < 0)
  96.             {
  97.                 return 0;
  98.             }
  99.             string maskBits = "";
  100.             for (int i = 0; i <= position; i++)
  101.             {
  102.                 maskBits += '1';
  103.             }
  104.             long maskNumber = Convert.ToInt64(maskBits, 2);
  105.             return maskNumber;
  106.         }
  107.  
  108.         private static long invertBitMasks(long mask)
  109.         {
  110.             long result = mask ^ ((long)-1);
  111.             return result;
  112.         }
  113.     }
  114. }
Add Comment
Please, Sign In to add comment