首页 > 解决方案 > 这是已定义问题的正确代码吗?

问题描述

任何人都可以帮助我在 c# 中进行位交换。实际上是这样的,该函数接受一个数字,然后将其转换为二进制,然后交换其任何位,然后将其转换为十进制并返回该数字。

这是我尝试过的:

DectoBin(int num) {
    stringBuilder strBin = new StringBuilder();
    while (num / 2 ! =1) {
        strBin.Append((num % 2).ToString());
        num = num / 2;
    }
    String str = strBin.ToString();
    int BinDec(string str)
    int DecNum = 0;
    for (int i = str.length - 1; i >= 0; i++) {
        DecNum = +DecNum
        int.parse(str[k++] * pow(2, i);
    }
    return DecNum;
}

我很快就需要这个问题的 c# 代码。如果有人可以提供代码,我将非常感激。

标签: c#

解决方案


您的问题很模糊,但是,我可以提供一些建议。首先,让我们将初始表示int为方便string

  int value = ...

  // Meanful bits only : 5 -> "101" (without leading zeroes)
  string bits = Convert.ToString(unchecked((uint) value), 2); 

  // All 32 bits : 5 -> "00000000000000000000000000000101" 
  string allBits = Convert.ToString(unchecked((uint) value), 2).PadLeft(32, '0');

查询时间;让我们使用Linq,它会非常方便。取决于什么是交换意味着它可以是

  using System.Linq;

  ...

  // reversed bits: "101" -> "101", "100" -> "001", etc.
  // but either "bits" or "allBits" as an argument 
  string result = string.Concat(bits.Reverse());

或者

  // each '0' truns into "1" and vice versa: "101" -> "010", "100" -> "011" etc
  // but either "bits" or "allBits" as an argument 
  string result = string.Concat(bits.Select(b => b == '1' ? '0' : '1')); 

最后,让我们在int以下帮助下收回Convert

  int outcome = unchecked((int)Convert.ToUInt32(result, 2));

推荐阅读