示例(星号旁边的星号):
[Fact]
public void BigInteger_ToString_behavior_is_odd()
{
writeHex(new BigInteger(short.MaxValue)); // 7fff
writeHex(new BigInteger(short.MaxValue) + 1); // 08000 **
writeHex(new BigInteger(ushort.MaxValue)); // 0ffff **
writeHex(new BigInteger(ushort.MaxValue) + 1); // 10000
writeHex(new BigInteger(int.MaxValue)); // 7fffffff
writeHex(new BigInteger(int.MaxValue) + 1); // 080000000 **
writeHex(new BigInteger(uint.MaxValue)); // 0ffffffff **
writeHex(new BigInteger(uint.MaxValue) + 1); // 100000000
writeHex(new BigInteger(long.MaxValue)); // 7fffffffffffffff
writeHex(new BigInteger(long.MaxValue) + 1); // 08000000000000000 **
writeHex(new BigInteger(ulong.MaxValue)); // 0ffffffffffffffff **
writeHex(new BigInteger(ulong.MaxValue) + 1); // 10000000000000000
}
private static void writeHex(BigInteger value)
{
Console.WriteLine(value.ToString("x"));
}
是否有一个原因?
我将如何删除这多余的零?我可以只检查字符串开头是否为零,如果是,将其删除?有什么值得考虑的案例吗?
最佳答案
如果没有前导零,则该数字可能看起来像是二进制补码中相同位数的负数。放置前导零可确保未设置高位,因此不可能将其解释为负数。
继续并删除第一个字符(如果为零),除非它是字符串中的唯一字符。
关于c# - 为什么BigInteger.ToString(“x”)在signed.MaxValue(不包括)和unsigned.MaxValue(不包括)之间的值前面加上0?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57688144/