我想删除ulong的最后一个位。这是我的所作所为:
ulong mydata;
...
ulong t = 1;
for (int i = 0; i < ulongSizeBits; i++)
{
if ((myData&t)!=0)
{
mydata = mydata & (~t);
break;
}
t <<= 1;
}
问题是这不像宣传的那样有效。让我们做另一个实验:
var test = 1U;
var t1 = ~test;
var t = 1;
for (int i = 0; i < 64; i++)
{
Console.Write((t&t1)!=0?1:0);
t <<= 1;
}
输出不是预期的01111111111111111111111111111111111111111111111111111111111111
,而是0111111111111111111111111111111100000000000000000000000000000000
。看来,按位不会将ulong转换为uint或其他东西。
解决此问题的最佳方法是什么?
答案 0 :(得分:2)
1U
不是ulong
。它是uint
。将test
和t
声明为ulong
,即可获得所需内容:
var test = 1UL;
var t1 = ~test;
var t = 1UL;
for (int i = 0; i < 64; i++)
{
Console.Write((t & t1) != 0 ? 1 : 0);
t <<= 1;
}
打印
01111111111111111111111111111111111111111111111111111111111111