长类型的最大HEX值

本文关键字:HEX 类型 | 更新日期: 2023-09-27 18:19:58

我已经将Java代码移植到C#。你能解释一下为什么我在下面的行中出现编译时错误吗(我使用VS 2008):

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

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

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

长类型的最大HEX值

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;

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

private ulong l = 0xffffffffffffffffL;

在Java中,l的实际值将是-1,因为它会溢出2^63 - 1的最大值,所以您可以将常量替换为-1

0xffffffffffffffff大于带符号的long所能表示的值。

你可以插入一个演员阵容:

 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

您可以这样做:

private long l = long.MaxValue;

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

private ulong l = ulong.MaxValue;