Advertisement
Guest User

BitRotation

a guest
Feb 11th, 2013
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.01 KB | None | 0 0
  1. using System;
  2. using System.Text;
  3.  
  4. class BitRotation
  5. {
  6.     static void PrintResult(bool isNumber, int number)
  7.     {
  8.         Console.Write("The created symbol is: ");
  9.         if (isNumber)
  10.         {
  11.             Console.WriteLine(number);
  12.         }
  13.         else
  14.         {
  15.             Console.WriteLine((char)number);
  16.         }
  17.  
  18.         Console.WriteLine(Convert.ToString(number, 2).PadLeft(32, '0'));
  19.     }
  20.  
  21.     static int RotateBits(int number, byte firstBeginningPosition, byte secondBeginningPosition, byte range)
  22.     {
  23.         byte distance = (byte)(secondBeginningPosition - firstBeginningPosition);
  24.         for (int bit = firstBeginningPosition; bit < (firstBeginningPosition + range); bit++)
  25.         {
  26.             int firstMask = 1 << bit;
  27.             int firstMaskNumber = number & firstMask;
  28.             byte firstBitValue = (byte)(firstMaskNumber >> bit);                  //0 or 1
  29.             int secondMask = 1 << (bit + distance);
  30.             int secondMaskNumber = number & firstMask;
  31.             byte secondBitValue = (byte)(firstMaskNumber >> (bit + distance));    //0 or 1
  32.             if (firstBitValue == 1)
  33.             {                                                                     //Change bit (i + range) to 1
  34.                 int changeNumber = SetBitToOne((byte)(bit + distance), number);
  35.                 if (secondBitValue == 1)
  36.                 {                                                                 //Change bit i to 1
  37.                     number = SetBitToOne((byte)bit, changeNumber);
  38.                 }
  39.                 else
  40.                 {                                                                 //Change bit i to 0
  41.                     number = SetBitToZero((byte)bit, changeNumber);
  42.                 }
  43.             }
  44.             else
  45.             {                                                                     //Change bit (i + range) to 0
  46.                 int changeNumber = SetBitToZero((byte)(bit + distance), number);
  47.                 if (secondBitValue == 1)
  48.                 {                                                                 //Change bit i to 1
  49.                     number = SetBitToOne((byte)bit, changeNumber);
  50.                 }
  51.                 else
  52.                 {                                                                //Change bit i to 0
  53.                     number = SetBitToZero((byte)bit, changeNumber);
  54.                 }
  55.             }
  56.         }
  57.  
  58.         return number;
  59.     }
  60.  
  61.     static int SetBitToOne(byte position, int number)
  62.     {
  63.         int changeMask = 1 << position;
  64.         int changeNumber = number | changeMask;
  65.         return changeNumber;
  66.     }
  67.  
  68.     static int SetBitToZero(byte position, int number)
  69.     {
  70.         int changeMask = ~(1 << position);
  71.         int changeNumber = number & changeMask;
  72.         return changeNumber;
  73.     }
  74.  
  75.  
  76.     static void Main()
  77.     {
  78.         Console.OutputEncoding = Encoding.UTF8;
  79.         Console.WriteLine("This program exchange the bits in the intervals");
  80.         Console.WriteLine("[first beginning position; first beginning position + range)");
  81.         Console.WriteLine("and\n[second beginning position; second beginning position + range)");
  82.         Console.WriteLine("Enter symbol");
  83.  
  84.         int number;
  85.         string input = Console.ReadLine();
  86.         bool isNumber = int.TryParse(input, out number);
  87.         if (!isNumber)
  88.         {
  89.             number = (int)input[0];
  90.         }
  91.  
  92.         Console.WriteLine(Convert.ToString(number, 2).PadLeft(32, '0'));
  93.  
  94.         Console.WriteLine("Enter first beginning position");
  95.         byte firstBeginningPosition = byte.Parse(Console.ReadLine());
  96.         Console.WriteLine("Enter second beginning position");
  97.         byte secondBeginningPosition = byte.Parse(Console.ReadLine());
  98.         Console.WriteLine("Enter range");
  99.         byte range = byte.Parse(Console.ReadLine());
  100.  
  101.         number = RotateBits(number, firstBeginningPosition, secondBeginningPosition, range);
  102.  
  103.         PrintResult(isNumber, number);
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement