【发布时间】:2020-09-18 23:19:55
【问题描述】:
我目前正在为我的学校做一个关于二进制数的项目。我已经制作了一个可以正常工作的加法计算器,现在我正在尝试制作一个用于减法的计算器。我面临一些问题。最大的问题是我得到负数作为输出,当我使用binary 2's complement 时,我没有得到任何负数结果,但它们仍然是错误的。示例:当用11110(30) 减去110010(50) 时,我的输出是10-1-100 而不是10100。
在第二补码(00010) 中转换 30 时,我的输出是 110000,即十进制的 48
代码如下:
#include <iostream>
using namespace std;
int main() {
long a, b;
int i = 0, r = 0, sub[20];
cout << "1st number: ";
cin >> a;
cout << "2nd number: ";
cin >> b;
while (a != 0 || b != 0)
{
sub[i++] = (a % 10 - b % 10 + r) % 2;
r = (a % 10 - b % 10 + r) / 2;
a = a / 10;
b = b / 10;
}
if (r != 0)
sub[i++] = r;
--i;
cout << "Difference: ";
while (i >= 0)
cout << sub[i--];
cout << ". ";
system("pause");
return 0;
}
提前致谢
【问题讨论】:
-
如果有一个问题值得测试输入、预期输出和实际输出,就是这样。 Update your question 包含该信息。
-
恕我直言,将数字输入为
std::string将使玩数字(或位)更容易。例如字符串中某位的值为:unsigned int bit_value = input_string[x] - '0';
标签: c++ binary calculator subtraction