相反的数学能力添加数字的方法

ado*_*lot 3 c# math

我有将Booleans数组转换为整数的方法.看起来像这样

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();
        }
   }
Run Code Online (Sandbox Code Playgroud)

现在,我想使布尔值的相反方法返回数组作为我短,.NET和C#的知识到现在为止我有switch语句的只有我的脑海里硬编码,或者对于每一个可能的int值的条件.

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

            if (data == 0)
            {
                outputs[0] = false;
                outputs[1] = false;
                outputs[2] = false;
                outputs[3] = false;
                outputs[4] = false;
                outputs[5] = false;
                outputs[6] = false;
                outputs[7] = false;
            }
            //After thousand lines of coed
            if (data == 255)
            {
                outputs[0] = true;
                outputs[1] = true;
                outputs[2] = true;
                outputs[3] = true;
                outputs[4] = true;
                outputs[5] = true;
                outputs[6] = true;
                outputs[7] = true;
            }
            return outputs;
        }
Run Code Online (Sandbox Code Playgroud)

我知道必须有更简单的方法.

SLa*_*aks 8

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

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

    for(int i = 0; i < 8; i++)
        outputs[i] = (data & (1 << i)) == (1 << i);

    return outputs;
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用按位运算符,将您快:(未经测试)

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

    return data;
}
Run Code Online (Sandbox Code Playgroud)