需要帮助以16位二进制显示2的补码

时间:2013-01-29 19:51:11

标签: c++ binary

  

可能重复:
  Efficiently convert between Hex, Binary, and Decimal in 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函数是你可以在互联网上找到的十进制到二进制的函数,但它只有在我输出到控制台时才有效,并且它不适用于负数,所以我不能拿2的补充。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

要计算数字的二进制补码,可以反转数字(将其所有0位更改为1,将其所有1位更改为0),然后再加1。就这么简单。但是,如果数字首先是负数,那么你只需要这样做;非负数的两个补码就是数字本身(未转换)。

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