Guest User

Untitled

a guest
Jan 4th, 2015
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 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. }
Advertisement
Add Comment
Please, Sign In to add comment