繁体   English   中英

ulong的按位求反运算符返回uint

[英]bitwise negation operator for ulong returns uint

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

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

1U不是ulong uint 声明testtulong ,你会得到你所需要的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM