Tom*_*len 4 c# 64-bit bits bit-manipulation
给定此代码以整数输出所有位:
private string getBitLiteral(bool bitVal)
{
if (bitVal)
{
return ("1");
}
else
{
return ("0");
}
}
Run Code Online (Sandbox Code Playgroud)
Int64 intThisHand = 127;
for (int i = 64; i > 0; i--)
{
HttpContext.Current.Response.Write(
getBitLiteral((intThisHand & (1 << i)) != 0)
);
}
Run Code Online (Sandbox Code Playgroud)
为什么打印出来:
1000000000000000000000000011111110000000000000000000000000111111
Run Code Online (Sandbox Code Playgroud)
首先我是正确的,因为我希望最后7位是1
其次,为什么中间有一些1?我希望它们都是0,除了尾随的7 1.
Cod*_*aos 18
1 << i因此是32位整数,因此溢出.
我认为1l << i会解决它.
((long)1)<<i可能更具可读性.
此外,您有一个off-by-one错误.你想要63到0而不是64到1.因为1 << 1是2而不是1.
您是否对代码被破坏的原因感到好奇,或者您只是想将数字显示为二进制?
如果是后者那么你可以这样做而不是重新发明轮子:
string asBinary = Convert.ToString(intThisHand, 2);
Run Code Online (Sandbox Code Playgroud)
或者,如果要填充所有64位数字:
string asBinary = Convert.ToString(intThisHand, 2).PadLeft(64, '0');
Run Code Online (Sandbox Code Playgroud)