Максимальное значение HEX для типа long - PullRequest
2 голосов
/ 11 января 2012

Я перенес Java-код на C #. Не могли бы вы объяснить, почему у меня есть ошибка времени компиляции в следующей строке (я использую VS 2008):

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

Невозможно преобразовать тип источника ulong в тип цели long

Мне нужно то же значение, что и для исходного кода Java.

Ответы [ 4 ]

3 голосов
/ 11 января 2012

Java не возражает, если константа переполняется в этой конкретной ситуации - значение, которое вы в действительности дали -1.

Самый простой способ достижения того же эффекта в C #:

private long l = -1;

Если вы хотите сохранить 16 фс, вы можете использовать:

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

Если вы на самом деле хотите получить максимальное значение для длинного со знаком, вы должны использовать:

// Java
private long l = Long.MAX_VALUE;
// C#
private long l = long.MaxValue;
3 голосов
/ 11 января 2012

Если вы не беспокоитесь об отрицательных значениях, вы можете попробовать использовать unsigned long:

private ulong l = 0xffffffffffffffffL;

В Java фактическое значение l будет -1, поскольку оно будет превышать максимальное значение 2^63 - 1, поэтому вы можете просто заменить свою константу на -1.

2 голосов
/ 11 января 2012

0xffffffffffffffff больше, чем может представлять длинная подпись.

Вы можете вставить актерский состав:

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

Поскольку C # использует дополнение до двух, 0xffffffffffffffff представляет -1:

private long l = -1;

Или объявите переменную как unsigned, что, вероятно, является самым правильным выбором, если вы хотите представить битовые шаблоны:

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

Максимальное значение подписываемого лонга:

private long l = 0x7fffffffffffffffL;

Но это лучше записать как long.MaxValue.

0 голосов
/ 11 января 2012

Вы можете сделать это:

private long l = long.MaxValue;

... но, как указал mdm, вы, вероятно, на самом деле хотите ulong.

private ulong l = ulong.MaxValue;
...