如何把一个任意正整数拆解成几个是2的n(n为正整数)次方的数,例如给参数25,就得到16 8 1;30 就得到16 8 4 2

解决方案 »

  1.   

                List<double> lstt = new List<double>();
                String ssssssssssssss = Convert.ToString(25, 2);
                int index = ssssssssssssss.Length - 1;
                foreach(char ch in ssssssssssssss){
                    if (ch == '1')
                    {
                        lstt.Add(Math.Pow(2, index));
                    }
                    index--;
                }
      

  2.   

    public void Func(int input)
    {
       int m = 1;
       for(int i = 1;i<32;i++) 
       {
          if(m & input == m)
            Console.WriteLine(m);          m = m << 1;
       }
    }
      

  3.   


            /// <summary>
            /// 把一个任意正整数拆解成几个是2的n次方的数
            /// </summary>
            /// <param name="num">传入的正整数</param>
            /// <returns>结果字符串:传入正整数51,输出结果为"2的0次方+2的1次方+2的4次方+2的5次方"                 </returns>
            public string Fun(int num)
            {
                string outputStr = "";
                string ss = Convert.ToString(num, 2);
                List<char> list = list = new List<char>();
                foreach (char s in ss)
                {
                    list.Add(s);
                }
                int j = 0; //控制幂
                for (int i = list.Count - 1; i > -1; i--)
                {
                    if (list[i] == '1')
                    {
                        outputStr += "2的" + j + "次方+";
                    }
                    j++;
                }
                outputStr = outputStr.Substring(0, outputStr.Length - 1); //去最后一个"+"号
                return outputStr;
            }
      

  4.   


    int v = 123455;
    int x = 0, y = 1;
    string s;
    while(y <= v)
    {
       if((v & (1 << x)) == 1)
      {
           s += pow(2, x).tostring() + " + ";
      }
      x++;
      y = pow(2, x);
    }
      

  5.   

    谢谢 就是用“与”操作方便实现对checkboxlist的选中显示。
      

  6.   

    int controlTPSumValue = int.Parse(model.ControlTP.ToString());
                    
                    for (int i = 0; i < cblControlTP.Items.Count; i++)
                    {
                        if ((controlTPSumValue & int.Parse(cblControlTP.Items[i].Value)) > 0)
                            cblControlTP.Items[i].Selected = true;
                    }