如何解决二进制计算器减法
我目前正在为我的学校做一个有关二进制数的项目。我已经制作了一个可以正常工作的加法计算器,现在我正尝试制作一个用于减法的计算器。在那里,我面临一些问题。最大的问题是我得到负数作为输出,当我使用binary 2's complement
时我没有得到负数,但是它们仍然是错误的。示例:用110010
(30)减去11110
(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;
}
预先感谢
解决方法
关于减法,我可以看到您只是逐位比较数字,并且第一个数字中的一位是0
,而第二个数字中的对应位是{{1 }},它只会执行1
,而不会考虑数字的其他数字。
添加一个在当前数字为负数时更改其他数字的条件应该可以解决问题:
0 - 1 = -1
关于在第二补码中转换数字。输入应该如何?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。