1

我想删除 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 或其他东西。

解决此问题的最佳方法是什么?

4

1 回答 1

2

1U不是ulong。是uint。声明testt作为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
于 2014-04-20T08:26:56.747 回答