Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数学幂加法的逆方法_C#_Math - Fatal编程技术网

C# 数学幂加法的逆方法

C# 数学幂加法的逆方法,c#,math,C#,Math,我有一个将布尔数组转换为整数的方法。看起来像这样 class Program { public static int GivMeInt(bool[] outputs) { int data = 0; for (int i = 0; i < 8; i++) { data += ((outputs[i] == true) ? Convert.ToInt

我有一个将布尔数组转换为整数的方法。看起来像这样

class Program
    {
        public static int GivMeInt(bool[] outputs)
        {
            int data = 0;
            for (int i = 0; i < 8; i++)
            {
                data += ((outputs[i] == true) ? Convert.ToInt32(Math.Pow(2, i)) : 0);
            }
            return data;

        }

        static void Main(string[] args)
        {
            bool[] outputs = new bool[8];
            outputs[0] = false;
            outputs[1] = true;
            outputs[2] = false;
            outputs[3] = true;
            outputs[4] = false;
            outputs[5] = false;
            outputs[6] = false;
            outputs[7] = false;
            int data = GivMeInt(outputs);
            Console.WriteLine(data);
            Console.ReadKey();
        }
   }

我知道一定有更简单的方法。

整个过程都可以改为使用。

您需要使用位运算符:(已测试)

publicstaticbool[]GiveMeBool(int数据){
bool[]输出=新bool[8];
对于(int i=0;i<8;i++)
输出[i]=(数据和(1试试这个

public static bool[] GiveMeBool(int data)
{
    bool[] outputs = new bool[8];

    for (int i = 0; i < 8; i++)
        outputs[i] = (data & (int)Math.Pow(2, i)) != 0;

    return outputs;
}
publicstaticbool[]GiveMeBool(int数据)
{
bool[]输出=新bool[8];
对于(int i=0;i<8;i++)
输出[i]=(数据和(int)数学功率(2,i))!=0;
返回输出;
}

下面的内容怎么样

Int32 x = 0xFF33;
bool[] retval = new bool[32];
for (int i = 0; i < 32 && x != 0; i++, x = x >> 1)
{
    retval[i] = (x & 1) == 1;
}
int32x=0xFF33;
bool[]retval=新bool[32];
对于(int i=0;i<32&&x!=0;i++,x=x>>1)
{
retval[i]=(x&1)==1;
}

它使用位移位来实现它的魔力。

我用Java测试了这些方法。唯一显著的区别是
bool
vs
boolean
关键字

public class Test {

    public static void main(String[] args) {
        boolean[] bools = new boolean[]{true,true,false,false,false,false,false,false};
        int num = GivMeInt(bools);
        boolean[] bools2 = GivMeBools(num);
        for(int i = 0; i < 8; i++) System.out.println(bools[i]==bools2[i]);
    }

    public static int GivMeInt(boolean[] outputs)
        {
            int data = 0;
            for (int i = 0; i < 8; i++)
            {
                if(outputs[i]) {
                    data += (1 << i);

                }
            }
            return data;
    }

    public static boolean[] GivMeBools(int input)
        {
            boolean[] outputs = new boolean[8];
            for (int i = 0; i < 8; i++)
            {
                outputs[i] = (input & 0x1) == 1;
                input = input >>> 1;
            }
            return outputs;

        }
}
公共类测试{
公共静态void main(字符串[]args){
boolean[]bools=新的boolean[]{true,true,false,false,false,false,false,false};
int num=GivMeInt(布尔);
布尔值[]bools2=GivMeBools(num);
对于(inti=0;i<8;i++)System.out.println(bools[i]==bools2[i]);
}
公共静态int GivMeInt(布尔[]输出)
{
int数据=0;
对于(int i=0;i<8;i++)
{
如果(输出[i]){
数据+=(1>>1;
}
返回输出;
}
}

这使用位移位

public static bool[] GiveMeBool(Int32 data)
{
    bool[] bits = new bool[32];

    for (i = 0; i <= bits.Length - 1; i++) {
        bits(i) = (data & 1) == 1;
        data >>= 1;
    }

    return bits;
}
publicstaticbool[]GiveMeBool(Int32数据)
{
bool[]位=新bool[32];
对于(i=0;i>=1;
}
返回位;
}

任何时候,当你想“//1000行男女同校”之后,你可能应该来StackOverflow=)挑剔:那是2816行代码。
Int32 x = 0xFF33;
bool[] retval = new bool[32];
for (int i = 0; i < 32 && x != 0; i++, x = x >> 1)
{
    retval[i] = (x & 1) == 1;
}
public class Test {

    public static void main(String[] args) {
        boolean[] bools = new boolean[]{true,true,false,false,false,false,false,false};
        int num = GivMeInt(bools);
        boolean[] bools2 = GivMeBools(num);
        for(int i = 0; i < 8; i++) System.out.println(bools[i]==bools2[i]);
    }

    public static int GivMeInt(boolean[] outputs)
        {
            int data = 0;
            for (int i = 0; i < 8; i++)
            {
                if(outputs[i]) {
                    data += (1 << i);

                }
            }
            return data;
    }

    public static boolean[] GivMeBools(int input)
        {
            boolean[] outputs = new boolean[8];
            for (int i = 0; i < 8; i++)
            {
                outputs[i] = (input & 0x1) == 1;
                input = input >>> 1;
            }
            return outputs;

        }
}
public static bool[] GiveMeBool(Int32 data)
{
    bool[] bits = new bool[32];

    for (i = 0; i <= bits.Length - 1; i++) {
        bits(i) = (data & 1) == 1;
        data >>= 1;
    }

    return bits;
}