Advertisement
Siropo

exchangesBits2

Nov 10th, 2012
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.20 KB | None | 0 0
  1. // * Write a program that exchanges bits {p, p+1, …, p+k-1) with bits {q, q+1, …, q+k-1} of given 32-bit unsigned integer.
  2.  
  3. using System;
  4.  
  5. class exchangesBits
  6. {
  7.     static void Main()
  8.     {
  9.  
  10.         int n = 2046820347; // number to change bits
  11.         int mask = 0;
  12.         int nAndMask = 0;
  13.         int bit = 0;
  14.        
  15.         int replace = n;
  16.  
  17.         byte q = 2; // start first position to get bits
  18.         byte k = 25; // start second position to get bits
  19.         byte p = 4; // number of bits to gets after choise first and second positions
  20.  
  21.         int[] myArrayQ = new int[p]; // array for first bits
  22.         int[] myArrayK = new int[p]; // array for second bits
  23.  
  24.         for (byte i = 0; i < p; i++)
  25.         {
  26.             byte firstPos = q; // start position to get bits
  27.             firstPos += i;     // position + i
  28.             mask = 1 << firstPos;
  29.             nAndMask = n & mask;
  30.             bit = nAndMask >> firstPos; // return bit on position
  31.             myArrayQ[i] = bit; // create array for bits
  32.         }
  33.  
  34.         for (byte i = 0; i < p; i++)
  35.         {
  36.             byte secondPos = k; // start position to get bits
  37.             secondPos += i; // position + i
  38.             mask = 1 << secondPos;
  39.             nAndMask = n & mask;
  40.             bit = nAndMask >> secondPos; // return bit on position
  41.             myArrayK[i] = bit;
  42.             if (bit != myArrayQ[i]) // if bit on position + p not equal to position on bit on ArrayQ whit bits
  43.             {
  44.                 replace = replace ^ mask; // replace bit on this position whit bit on current array position
  45.             }
  46.         }
  47.  
  48.         for (byte i = 0; i < p; i++)
  49.         {
  50.             byte firstPos = 2; // start position to get bits
  51.             firstPos += i; // position + i
  52.             mask = 1 << firstPos;
  53.             if (myArrayQ[i] != myArrayK[i]) // if ArrayQ[i] not equal to position on bit on ArrayK[i]
  54.             {
  55.                 replace = replace ^ mask; // replace bit on this position whit bit on current array position
  56.             }
  57.         }
  58.         Console.WriteLine(Convert.ToString(n, 2).PadLeft(32, '0'));
  59.         Console.WriteLine(Convert.ToString(replace, 2).PadLeft(32, '0'));
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement