c#-为什么BigInteger.ToString(“ x”)在signed.MaxValue(不包括)和unsigned.MaxValue(包括)之间的值前面加上0?

示例(星号旁边的星号):

    [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"));
    }

>有这个原因吗?
>如何删除这个多余的零?我可以只检查字符串开头是否为零,如果是,将其删除?有什么需要考虑的极端情况吗?

解决方法:

如果没有前导零,则该数字可能看起来像是二进制补码中相同位数的负数.放置前导零可确保未设置高位,因此不可能将其解释为负数.

继续并删除第一个字符(如果为零),除非它是字符串中的唯一字符.

上一篇:大量的BigInteger日志问题


下一篇:2018 焦作E java 高精度暴力