1

可能重复:
在 C/C++ 中高效地转换十六进制、二进制和十进制

我正在学习汇编语言课程,并被要求编写一个应用程序来接受一个有符号整数作为输入并输出相应的 2 的补码。我一直在互联网上试图找到有用的代码,但我唯一能找到的是转换成精确二进制的代码(不是我需要的带有前导零的 16 位格式)。这是我到目前为止的代码:

#include<iostream>
#include<string>
using namespace std;


string binaryArray[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void toBinary(int);
void convertNegative();

int main()
{
cout << "This app converts an integer from -32768 to 32767 into 16-bit 2's complement binary format" << endl;

cout << "Please input an integer in the proper range: ";

int num;
cin >> num;

if (num < -32768 || num > 32767)
    cout << "You have entered an unacceptable number, sorry." << endl;
if (num < 0)
{
    toBinary(num);
    convertNegative();
}
else
    toBinary(num);
cout << endl;

system("pause");
return 0;
}

我的 toBinary 函数是您可以在 Internet 上找到的用于十进制到二进制的函数,但它仅在我输出到控制台时才有效,并且它不适用于负数,所以我不能取 2 的补码。有任何想法吗?

4

1 回答 1

2

要计算一个数字的二进制补码,请将该数字取反(将其所有 0 位更改为 1,将其所有 1 位更改为 0),然后加一。就是这么简单。但是,您只需要首先在数字为负数的情况下这样做;非负数的二进制补码就是数字本身(未转换)。

但是您将数字作为输入,并将其存储在变量“num”中。该变量二进制补码形式。这就是的计算机存储它的方式。您根本不需要将其“转换”为二进制补码形式!如果您只是一次将位移出一个并打印它们,您将得到该数字的二进制补码。只需将它们按正确的顺序移动并每次都摘掉最左边的位,您就有了解决方案。它真的很短很简单。

于 2013-01-29T19:56:19.173 回答