Advertisement
Guest User

BitRoller

a guest
Apr 8th, 2015
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.42 KB | None | 0 0
  1. using System;
  2. class BitRoller
  3. {
  4.     static void Main()
  5.     {
  6.         uint n = uint.Parse(Console.ReadLine());
  7.         int freeze = int.Parse(Console.ReadLine());
  8.         uint roll = uint.Parse(Console.ReadLine());
  9.         for (int i = 0; i < roll; i++)
  10.         {
  11.             // get bits'values
  12.             uint firstBit = n & 1;
  13.             uint freezeBit = n >> freeze & 1;
  14.             uint freezeBitLeft;
  15.             if (freeze == 18)
  16.             {
  17.                 freezeBitLeft = firstBit;
  18.             }
  19.             else
  20.             {
  21.                 freezeBitLeft = (n >> freeze + 1) & 1;
  22.             }
  23.             n >>= 1;
  24.             // set last bit
  25.             if (firstBit == 0)
  26.             {
  27.                 n = (uint)(n & ~(1 << 18));
  28.             }
  29.             else
  30.             {
  31.                 n = n | 1 << 18;
  32.             }
  33.             // set freeze bit
  34.             if (freezeBit == 0)
  35.             {
  36.                 n = n & (uint)~(1 << freeze);
  37.             }
  38.             else
  39.             {
  40.                 n = n | (uint)(1 << freeze);
  41.             }
  42.             // set bit on the left of the frozen bit (previously on the right)
  43.             if (freezeBitLeft == 0)
  44.             {
  45.                 n = n & (uint)~(1 << (freeze - 1));
  46.             }
  47.             else
  48.             {
  49.                 n = n | (uint)(1 << (freeze - 1));
  50.             }
  51.         }
  52.         Console.WriteLine(n);
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement