长类型的最大十六进制值

时间:2012-01-11 19:25:27

标签: c# java types long-integer

我已将Java代码移植到C#。 你能解释为什么我在后续行中有编译时错误(我使用VS 2008):

    private long l = 0xffffffffffffffffL; // 16 'f' got here

无法将源类型ulong转换为目标类型long

我需要与原始Java代码相同的值。

4 个答案:

答案 0 :(得分:3)

假设您不担心负值,可以尝试使用unsigned long

private ulong l = 0xffffffffffffffffL;

在Java中,l的实际值为-1,因为它会溢出2^63 - 1最大值,因此您只需用-1替换常量。< / p>

答案 1 :(得分:3)

Java并不介意在这种特殊情况下是否有一个常量溢出 - 你给出的值实际上是-1。

在C#中实现相同效果的最简单方法是:

private long l = -1;

如果你想保留你可以使用的16 fs:

private long l = unchecked((long) 0xffffffffffffffffUL);

如果实际上想要签名长的最大值,则应使用:

// Java
private long l = Long.MAX_VALUE;
// C#
private long l = long.MaxValue;

答案 2 :(得分:2)

0xffffffffffffffff大于已签名的长号可以表示的内容。

您可以插入演员:

 private long l = unchecked( (long)0xffffffffffffffffL);

由于C#使用两个补码,0xffffffffffffffff代表-1

private long l = -1;

或者将变量声明为无符号,如果你想表示位模式,这可能是最干净的选择:

private ulong l = 0xffffffffffffffffL;
private ulong l = ulong.MaxValue;

一个长期的最大值是:

private long l = 0x7fffffffffffffffL;

但最好写成long.MaxValue

答案 3 :(得分:0)

你可以这样做:

private long l = long.MaxValue;

...但正如mdm指出的,你可能真的想要一个ulong。

private ulong l = ulong.MaxValue;