如何获得补充

1 c#

我需要找到作为输入给出的十进制数的补码.首先,我使用以下代码将十进制数转换为二进制数,

int decNum = int.Parse(Console.ReadLine());
string binRep = " ";
int digi = 0;
do
{
    digi = decNum % 2;
    binRep = digi.ToString() + binRep;
    decNum = decNum / 2;
} while (decNum >= 1);
Console.WriteLine(binRep);
Run Code Online (Sandbox Code Playgroud)

然后我这样做的时候

int onesComplement= ~(int.parse(binRep)),
Run Code Online (Sandbox Code Playgroud)

我得到了奇怪的答案,例如当我给出8作为输入时,我得到1000作为二进制数,但在使用波浪号(〜)得到'补码后,我得到-1001.我想知道我在这里缺少什么,我应该做些什么才能正确地得到补充?

Bro*_*ass 5

默认情况下,整数被解析为好像它是基数10,并且你没有指定不同的基数 - int.Parse()不提供这个.Convert.ToInt32()在您的情况下,您可以改为使用并指定数字所基于的基数2.

将指定基数中的数字的字符串表示形式转换为等效的32位有符号整数.

所以使用

int onesComplement= ~Convert.ToInt32(binRep, 2);
Run Code Online (Sandbox Code Playgroud)

您的程序还可以缩短为:

int decNum = int.Parse(Console.ReadLine());
string binRep = Convert.ToString(decNum, 2);
Console.WriteLine(binRep);
int onesComplement = ~Convert.ToInt32(binRep, 2);
Run Code Online (Sandbox Code Playgroud)

如果您不需要打印二进制输出,甚至更短:

int decNum = int.Parse(Console.ReadLine());
int onesComplement = ~decNum;
Run Code Online (Sandbox Code Playgroud)