我想删除 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 或其他东西。
解决此问题的最佳方法是什么?