将 NOT 运算符应用于非常大的二进制数 (1011111111000000000011111111110000000001111111111000000000011111111111)

问题描述

static string ReturnValueIfInputOneIsThree(string inputOne,string input)
{
    string result = "";
    if (CheckIfInputOneIsInACorrectFormatOrNot(inputOne,input) && inputOne == "3")
    {
        for (var i = 0; i < input.Length; i++)
        {
            if (input[i] == '0')
            {
                result += "1";
            }
            else if (input[i] == '1')
            {
                result += "0";
            }
        }

        var finalResult = Convert.ToIn64(result,2);
        return finalResult.ToString();
    }

    return ThisReturnValuInMain(inputOne,input);
}

如果我在基数 2 中引入一个数字并应用 not 运算符,例如 ~00110001 或 ~10 ,我得到了正确的结果,但是当我引入一个非常大的二进制数时:

1011111111000000000011111111110000000000111111111100000000001111111111结果不是“100000000111111111100000000001111111111000000000011111111110000000000”。

我尝试使用BigInteger,但是课程中的模块不允许我使用它,所以我必须以另一种方式解决问题。

你有什么建议如何在没有 BigInteger 的情况下解决这个问题?

解决方法

问题出在

101111111100000000001111111111000000000011111111110000000001111111111

作为 71 位,您正在执行 Convert.ToIn64(result,2);,这将其减少到 64 位。如果输入和输出都是字符串,那么为什么还要转换为 Int64 (a long)?取而代之的是return result


编辑:刚刚看到Lasse V. Karlsen的评论基本上是一样的

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...