BigInteger. Синтаксический анализ () на шестнадцатеричном числе дает отрицательные числа

Я начал использовать.NET 4 Системы. Численные данные. Структура BigInteger и я встретились с проблемой.

Я пытаюсь проанализировать строку, которая содержит шестнадцатеричное число без (положительного) знака. Я получаю отрицательное число.

Например, я делаю следующие два утверждают:

Assert.IsTrue(System.Int64.Parse("8", NumberStyles.HexNumber, CultureInfo.InvariantCulture) > 0, "Int64");
Assert.IsTrue(System.Numerics.BigInteger.Parse("8", NumberStyles.HexNumber, CultureInfo.InvariantCulture) > 0, "BigInteger");

Первые утверждают, успешно выполняется, вторые утверждают сбои. Я на самом деле добираюсь-8 вместо 8 в BigInteger.

Проблема, кажется, когда я - шестнадцатеричные запуски с 1 битом и не 0 битами (цифра между 8 и F включительно). Если я добавляю продвижение 0, все работает отлично.

Это - плохое использование с моей стороны? Действительно ли это - ошибка в BigInteger?

5
задан brickner 6 June 2010 в 09:30
поделиться

1 ответ

Это именно то, что должен делать метод.

MSDN: Метод BigInteger.Parse:

"Если значение является шестнадцатеричной строкой, то метод метод Parse(String, NumberStyles) интерпретирует значение как отрицательное число хранящееся с использованием двойного дополнения если его первые две шестнадцатеричные цифры больше или равны 0x80. Другими словами, метод метод интерпретирует старший бит первого байта в значении как бит знака. Чтобы убедиться, что шестнадцатеричная строка правильно интерпретируется как положительное число, то первая цифра в значении должна иметь значение нуля. Например, метод интерпретирует 0x80 как отрицательное значение, но он интерпретирует либо 0x080, либо 0x0080 как положительное значение."

11
ответ дан 13 December 2019 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: