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

    [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/

10-12 18:52