如何在不使用 Convert.To() 方法的情况下将以 10 为底的负数转换为以 8 为底的负数?
How to convert base 10 negative number to base 8 conversion without using Convert.To() method?
如何在不使用 Convert.To()
方法的情况下用八进制表示十进制负数?
public static string GetOctal(int number)
{
int base = 8;
}
例如:
-3 (base 10) = 37777777775 (base 8)
但是我应该使用什么算法来得到这个结果?
我的任务的测试用例:
[TestCase(-3, 8, ExpectedResult = "37777777775")]
[TestCase(-127, 8, ExpectedResult = "37777777601")]
[TestCase(-675432, 8, ExpectedResult = "37775330630")]
[TestCase(-1908345, 8, ExpectedResult = "37770560607")]
[TestCase(int.MinValue, 8, ExpectedResult = "20000000000")]
[TestCase(-3, 16, ExpectedResult = "FFFFFFFD")]
[TestCase(-127, 16, ExpectedResult = "FFFFFF81")]
[TestCase(-675432, 16, ExpectedResult = "FFF5B198")]
[TestCase(-1908345, 16, ExpectedResult = "FFE2E187")]
[TestCase(int.MinValue, 16, ExpectedResult = "80000000")]
[TestCase(1908345, 10, ExpectedResult = "1908345")]
[TestCase(int.MaxValue, 10, ExpectedResult = "2147483647")]
public string GetRadix_Tests(int number, int radix) => number.GetRadix(radix);
您始终可以在 source.dot.net here 找到 Convert
class 的源代码并遵循 ParseNumber
的 IntToString
方法:
public static string IntToString(int n, int radix, int width, char paddingChar, int flags)
{
Span<char> buffer = stackalloc char[66]; // Longest possible string length for an integer in binary notation with prefix
if (radix < MinRadix || radix > MaxRadix)
throw new ArgumentException(SR.Arg_InvalidBase, nameof(radix));
// If the number is negative, make it positive and remember the sign.
// If the number is MIN_VALUE, this will still be negative, so we'll have to
// special case this later.
bool isNegative = false;
uint l;
if (n < 0)
{
isNegative = true;
(...)
如何在不使用 Convert.To()
方法的情况下用八进制表示十进制负数?
public static string GetOctal(int number)
{
int base = 8;
}
例如:
-3 (base 10) = 37777777775 (base 8)
但是我应该使用什么算法来得到这个结果?
我的任务的测试用例:
[TestCase(-3, 8, ExpectedResult = "37777777775")]
[TestCase(-127, 8, ExpectedResult = "37777777601")]
[TestCase(-675432, 8, ExpectedResult = "37775330630")]
[TestCase(-1908345, 8, ExpectedResult = "37770560607")]
[TestCase(int.MinValue, 8, ExpectedResult = "20000000000")]
[TestCase(-3, 16, ExpectedResult = "FFFFFFFD")]
[TestCase(-127, 16, ExpectedResult = "FFFFFF81")]
[TestCase(-675432, 16, ExpectedResult = "FFF5B198")]
[TestCase(-1908345, 16, ExpectedResult = "FFE2E187")]
[TestCase(int.MinValue, 16, ExpectedResult = "80000000")]
[TestCase(1908345, 10, ExpectedResult = "1908345")]
[TestCase(int.MaxValue, 10, ExpectedResult = "2147483647")]
public string GetRadix_Tests(int number, int radix) => number.GetRadix(radix);
您始终可以在 source.dot.net here 找到 Convert
class 的源代码并遵循 ParseNumber
的 IntToString
方法:
public static string IntToString(int n, int radix, int width, char paddingChar, int flags) { Span<char> buffer = stackalloc char[66]; // Longest possible string length for an integer in binary notation with prefix if (radix < MinRadix || radix > MaxRadix) throw new ArgumentException(SR.Arg_InvalidBase, nameof(radix)); // If the number is negative, make it positive and remember the sign. // If the number is MIN_VALUE, this will still be negative, so we'll have to // special case this later. bool isNegative = false; uint l; if (n < 0) { isNegative = true; (...)