tockata

BitsInverter

May 31st, 2014
494
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.57 KB | None | 0 0
  1. //You are given a sequence of bytes. Consider each byte as sequences of exactly 8 bits.  You are given also a number step. Write a //program to invert the bits at positions: 1, 1 + step, 1 + 2*step, ... Print the output as a sequence of bytes.
  2. //Bits in each byte are counted from the leftmost to the rightmost. Bits are numbered starting from 1.
  3.  
  4. using System;
  5.  
  6. class BitsInverter
  7. {
  8.     static void Main()
  9.     {
  10.         int n = int.Parse(Console.ReadLine());
  11.         int step = int.Parse(Console.ReadLine());
  12.         int bitToChange = 7;
  13.         int[] numbers = new int[n];
  14.  
  15.         for (int i = 0; i < n; i++)
  16.         {
  17.             int number = int.Parse(Console.ReadLine());
  18.             for (int j = 7; j >= 0; j--)
  19.             {
  20.                 if (bitToChange >= 0)
  21.                 {
  22.                     int mask = 1 << bitToChange;
  23.                     int maskAndNumber = mask & number;
  24.                     int result = maskAndNumber >> bitToChange;
  25.                     if (result == 0)
  26.                     {
  27.                         number = number | mask;
  28.                     }
  29.                     else if (result == 1)
  30.                     {
  31.                         number = number ^ mask;
  32.                     }
  33.                     bitToChange -= step;
  34.                 }
  35.                 else
  36.                 {
  37.                     bitToChange += 8;
  38.                     break;
  39.                 }
  40.             }
  41.             numbers[i] = number;
  42.         }
  43.         foreach (int number in numbers)
  44.         {
  45.             Console.WriteLine(number);
  46.         }
  47.     }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment