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