static long[] Mask1=
{
0xFF, 0xFF00, 0xFF0000, 0xFF000000,
0xFF00000000, 0xFF0000000000, 0xFF000000000000, 0xFF00000000000000
};
static long[] Mask2 =
{
0x101010101010101, 0x202020202020202, 0x404040404040404, 0x808080808080808,
0x1010101010101010, 0x2020202020202020, 0x4040404040404040, 0x8080808080808080
};
在Java中,我可以将这些值放入long []中。
但是在C#中,我认为他们不能'转换为长'。
我只能在C#中使用ulong,但是为什么Java long和C#long具有相同的容量? -9,223,372,036,854,775,808到9,223,372,036,854,775,807没有? 我需要额外的掩码吗?
具体来说,我的错误是:
"Constant value `18374686479671623680' cannot be converted to a `long'"
Constant value `9259542123273814144' cannot be converted to a `long'
答案 0 :(得分:1)
long.MaxValue = 9223372036854775807
your value 1 = 18374686479671623680
your value 2 = 9259542123273814144
您的值大于已签名的长期可以容纳的值。这就是你必须使用unsigned。
的原因答案 1 :(得分:0)
你必须在C#中使用'未经检查'的强制转换来获取超出范围的值:
static long[] Mask1 = {0xFF, 0xFF00, 0xFF0000, 0xFF000000, 0xFF00000000, 0xFF0000000000, 0xFF000000000000, unchecked((long)0xFF00000000000000)};
static long[] Mask2 = {0x101010101010101, 0x202020202020202, 0x404040404040404, 0x808080808080808, 0x1010101010101010, 0x2020202020202020, 0x4040404040404040, unchecked((long)0x8080808080808080)};