比如:
3->0011 最大位为0010
4->0100 最大位为0100
5->0101 最大位为0100
.
.
.
有没有通用的公式 求最大的位是多少??

解决方案 »

  1.   

    我估计楼主是想知道转成2进制以后,最大位的值是多少,
    转成2进制以后,转成string类型,index("1"),然后其他位改成0就可以了
      

  2.   

    这样是可以的 因为byte[]数组比较长 考虑到效率问题 能不能不用装箱?
      

  3.   

    for (int i = 1; i < 16;i++ )
    {
        int j = i,k=0;
        while (j != 0)
        {
            k ++;
            j = j >> 1;
        }
        Console.WriteLine(i.ToString()+"最大位为:"+Convert.ToString(1<<(k-1), 2).PadLeft(4, '0'));
    }
      

  4.   

    private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show(jisuanzuidawei(100));
            }
            private string jisuanzuidawei(int i)
            {
                string str = Convert.ToString(i, 2);
                int weizhi = str.IndexOf('1');
                str=str.Replace('1', '0');         
                return  "1" + str.Substring(weizhi + 1);
            }
      

  5.   

    写了个二分的,只查1次的话,可以用这个,好处是不用建表,
    如果是多次查询的话,直接建一个1,2,4,8,16.....0x80000000,的数组,用BinarySearch一下,
    可以得到index,然后用位移转化为LZ想要的数,会更简单一些!如果需要处理Int64,稍微改一下也可以的!namespace ConsoleApplication8
    {
        class Program
        {
            static void Main(string[] args)
            {
                int m = HighBit(18);
            }        static int HighBit(int value)
            {
                int k = 16, m =16;
                
                while(true)
                {
                    k >>= 1;
                    
                    if((value >> m) == 1)
                        break;
                    else if((value >> m) > 1)
                        m += k;
                    else
                        m -= k;
                }            return 1 << m;
            }
        }
    }
      

  6.   


                for (int i = 0; ; ++i)
                {
                    if (a == 1)
                    {
                        return a << i;
                    }
                    a = a >> 1;
                }
    为0的情况要先排除