Представление decimal в C#

444
06 февраля 2017, 14:30

Добрый день, нужно узнать, как хранится тип decimal в C#. Побитово, т.е. где мантисса, разряд и т.п.

Answer 1

Вольный перевод ответа на SO:

Тип decimal хранится в 128 битах, но используется только 102 из них.
Первые три 32-битных целых представляют мантиссу, в последнем 32-битном целом:

  • старший бит (31-й) - содержит знак числа (1 - для отрицательных чисел).
  • биты 16-23 (младшие 8 бит старшего 16-битного слова) - содержат экспоненту.
  • остальные биты должны быть равны 0.
Answer 2

Лучше, чем исходники, вам ответ никто не даст. Заглядываем на sourceof.net, видим вот что (убрал статические данные и константы, перевёл комментарий на русский):

public struct Decimal : IFormattable, IComparable, IConvertible, IDeserializationCallback
        , IComparable<Decimal>, IEquatable<Decimal> {
    // [...]
    // Поля lo, mid, hi, и flags содержат представление значения типа Decimal.
    // Поля lo, mid, и hi содержат 96-битную мантиссу (целочисленную часть) Decimal.
    // Биты 0-15 (младшее слово) поля flags не используются и должны содержать ноль;
    // биты 16-23 должны содержать значение между 0 and 28, означающее степень 10,
    // на которую нужно разделить 96-битную мантиссу, чтобы получить значение Decimal;
    // биты 24-30 не используются и обязаны содержать ноль;
    // и наконец бит 31 означает знак значения Decimal, 0 означает положительное
    //  значение, а 1 - отрицательное.
    //
    // ВНИМАНИЕ: Не изменяйте порядок определения полей! Нативный код в этом классе
    // рассчитывает на именно такой порядок.
    private int flags;
    private int hi;
    private int lo;
    private int mid;
    // [...]
}
READ ALSO
Почему не удается использовать код?

Почему не удается использовать код?

Начал учится работать в Unity3D по обучающему видео и в нем был код (который не заработал):

484
Проблемы с обучением новых лиц в EMGU CV

Проблемы с обучением новых лиц в EMGU CV

Проблема заключается в том - что - база растет! и переобучение происходит все через :

462
Проверка хэш кода архива [требует правки]

Проверка хэш кода архива [требует правки]

Как можно проверить хэш код архива?

446