Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace _5.BitBuilder
- {
- class BitBuilder
- {
- static void Main()
- {
- bool check = true;
- long newNumber = 0;
- string input = Console.ReadLine();
- if (input == "quit")
- {
- Console.WriteLine(newNumber);
- check = false;
- System.Environment.Exit(-1);
- }
- else
- {
- newNumber = long.Parse(input);
- }
- do
- {
- input = Console.ReadLine();
- if (input == "quit")
- {
- Console.WriteLine(newNumber);
- check = false;
- System.Environment.Exit(-1);
- }
- else
- {
- int position = int.Parse(input);
- string manipulation = Console.ReadLine();
- switch (manipulation)
- {
- case "flip":
- newNumber = flipBit(newNumber, position);
- break;
- case "insert":
- newNumber = insertBit(newNumber, position);
- break;
- case "remove":
- newNumber = removeBit(newNumber, position);
- break;
- }
- }
- }
- while (check);
- }
- private static long flipBit(long number, int position)
- {
- long tempMask = (long)1 << position;
- long result = number ^ tempMask;
- return result;
- }
- private static long removeBit(long number, int position) // 123, 3
- {
- // 0111 1011
- long mask = bitMaskFromN(position - 1); // 0000 0111
- long tempNumber = mask & number; // 0000 0011
- number = number >> position + 1; // 0000 0111
- number = number << position; // 0011 1000
- number = number | tempNumber; // 0011 1011
- return number;
- }
- private static long insertBit(long number, int position) // 123, 3
- {
- // 0111 1011
- long mask = bitMaskFromN(position - 1); // 0000 0111
- long invertMask = invertBitMasks(mask); // (1) 1111 1000
- long tempMask = (long)1 << position; // 0000 1000
- long tempNumber = mask & number; // 0000 0011
- number = invertMask & number; // 0111 1000
- number = number << 1; // 1111 0000
- number = number | tempMask; // 1111 1000
- number = number | tempNumber; // 1111 1011
- return number;
- }
- public static long bitMaskFromN(int position)
- {
- if (position < 0)
- {
- return 0;
- }
- string maskBits = "";
- for (int i = 0; i <= position; i++)
- {
- maskBits += '1';
- }
- long maskNumber = Convert.ToInt64(maskBits, 2);
- return maskNumber;
- }
- private static long invertBitMasks(long mask)
- {
- long result = mask ^ ((long)-1);
- return result;
- }
- }
- }
Add Comment
Please, Sign In to add comment