Advertisement
roneygomes

NegativeBinary

Aug 4th, 2015
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.71 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5.  
  6. namespace TopTal
  7. {
  8.     internal class Solution
  9.     {
  10.         public static void Main(string[] args)
  11.         {
  12.             for (var i = 0; i <= 10; i++)
  13.             {
  14.                 var schroeppel = string.Join(", ", toNegativeBinary_Schroeppel(i).Select(x => x.ToString()));
  15.                 var iterativeLoop = string.Join(", ", toNegativeBinary(i).Select(x => x.ToString()));
  16.  
  17.                 Console.WriteLine("Schroepel: " + i + " => " + schroeppel);
  18.                 Console.WriteLine("Iterative Loop: " + i + " => " + iterativeLoop);
  19.                 Console.WriteLine();
  20.             }
  21.  
  22.             Console.WriteLine("Press any key to leave.");
  23.             Console.ReadKey();
  24.         }
  25.  
  26.         private static int[] toNegativeBinary_Schroeppel(int number)
  27.         {
  28.             const uint schroeppel = 0xAAAAAAAA;
  29.             var result = ((number + schroeppel) ^ schroeppel);
  30.             var bits = new BitArray(new [] {(byte) result});    
  31.  
  32.             return bits.Cast<bool>().Select(bit => bit ? 1 : 0).ToArray();
  33.         }
  34.  
  35.         private static int[] toNegativeBinary(int number)
  36.         {
  37.             var bits = new List<int>();
  38.  
  39.             if (number == 0)
  40.             {
  41.                 return new[] {0};
  42.             }
  43.  
  44.             while (number != 0)
  45.             {
  46.                 var remainder = number % -2;
  47.                 number /= -2;
  48.  
  49.                 if (remainder < 0)
  50.                 {
  51.                     number += 1;
  52.                     remainder += 2;
  53.                 }
  54.  
  55.                 bits.Add(remainder);
  56.             }
  57.  
  58.             return bits.ToArray();
  59.         }
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement