gpt4 book ai didi

c# - 为什么 BigInteger.ToString ("x") 为 signed.MaxValue(不含)和 unsigned.MaxValue(含)之间的值添加 0?

转载 作者:行者123 更新时间:2023-11-30 18:11:34 25 4
gpt4 key购买 nike

示例(奇怪行为旁边的星号):

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com