int的反向二进制表示(仅有效位)

时间:2015-09-24 15:11:28

标签: c# .net

我试图编写一个用于反转二进制数字的程序。例如,13的二进制表示是1101,而它的反转给出了1011,这对应于数字11对吗?

这是我的代码:

static void Main(string[] args)
{
    Console.WriteLine("Enter a Number");
    int numb = int.Parse(Console.ReadLine());
    int reverse = 0;
    while (numb > 0)
    {
        int rem = numb % 10;
        reverse = (reverse * 10) + rem;
        numb = numb / 10;

    }
    Console.WriteLine("Reverse number={0}", reverse);
    Console.ReadLine();
}

通过此代码我只能得到要反转的数字(13 - > 31)......

输入应该包含一个整数 N,1≤N≤1000000000的单行,我希望我的输出在一行中有一个整数,我希望通过反转二进制表示得到的数字 N

3 个答案:

答案 0 :(得分:8)

像这样的东西

Convert.ToString(value, 2)

说明:

  • "1101"返回二进制表示中的值(Reverse().ToArray()
  • '1','0','1','1' - 将字符串(char[])反转为字符序列并转换为数组new String(...)
  • "1011"char
  • 的数组构造字符串Convert.ToInt32(..., 2)
  • 最后,int将二进制表示转换回(AtomicInteger a).addAndGet(-1)

答案 1 :(得分:0)

您可以使用Convert.ToStringConvert.ToInt32方法,其中2表示二进制:

int numb = int.Parse(Console.ReadLine());
var reversedString = Convert.ToString(numb, 2).ReverseString();
var result = Convert.ToInt32(reversedString, 2);

...

public static string ReverseString(this string s)
{
    char[] arr = s.ToCharArray();
    Array.Reverse(arr);
    return new string(arr);
}

答案 2 :(得分:0)

有趣的练习是在不使用string转换的情况下执行此操作。

我很少有点经验,所以可能有更快更好的方法,但这似乎有效:

 public static IEnumerable<bool> ToBinary(this int n)
 {
     for (int i = 0; i < 32; i++)
     {
         yield return (n & (1 << i)) != 0;
     }
 }

 public static int ToInt(this IEnumerable<bool> b)
 {
     var n = 0;
     var counter = 0;

     foreach (var i in b.Trim().Take(32))
     {
         n = n | (i ? 1 : 0) << counter;
         counter++
     }

     return n;
 }

 private static IEnumerable<bool> Trim(this IEnumerable<bool> list)
 {
     bool trim = true;

     foreach (var i in list)
     {
         if (i)
         {
             trim = false;
         }

         if (!trim)
         {
             yield return i;
         }
     }
 }

现在你这样称呼它:

var reversed = n.ToBinary().Reverse().ToInt();