比如:
3->0011 最大位为0010
4->0100 最大位为0100
5->0101 最大位为0100
.
.
.
有没有通用的公式 求最大的位是多少??
3->0011 最大位为0010
4->0100 最大位为0100
5->0101 最大位为0100
.
.
.
有没有通用的公式 求最大的位是多少??
解决方案 »
- 如何知道insert數據入數據庫 需時多少
- C#,怎么用WCF实现邮件通信
- 关于SubString()方法的问题
- visual studio 连接数据库问题
- Flash 调用摄像头 (C# Webform)
- 急,急,急web页面用什么代替TrackBar 来做个播放器的进度条??
- .NET的那种RSA加解密算法能与JAVA的RSA加解密的保持一致?
- DECIMAL转成DOUBLE
- 如何弹出一个对话框,带ok和cancel按钮
- 有什么办法可以得到本机所在局域网中所有连接的服务器的名称?
- 如何添加datalist的项 单击 事件??
- 高分求教,分不够再加1000分。遍历电脑中的媒体文件并能进行各种操作,类似一个资源管理器
转成2进制以后,转成string类型,index("1"),然后其他位改成0就可以了
{
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'));
}
{
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);
}
如果是多次查询的话,直接建一个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;
}
}
}
for (int i = 0; ; ++i)
{
if (a == 1)
{
return a << i;
}
a = a >> 1;
}
为0的情况要先排除