我有一个长二进制形式的int数。
我想从这个数字中减去或添加另一个二进制数,保持目标变量的数据类型相同,即long int
我该怎么做?
我有一个解决方案,其中目标变量是一个int数组。
到目前为止我尝试了什么
int main() {
long int binary1;
long int binary2 = 0001;
int i = 0, rem = 0;
int sum[20];
printf("Enter binary number");
scanf("%ld", &binary1);
while (binary1 != 0 || binary2 != 0) {
sum[i++] =(binary1 % 10 + binary2 % 10 + rem) % 2;
rem =(binary1 % 10 + binary2 % 10 + rem) / 2;
binary1 = binary1 / 10;
binary2 = binary2 / 10;
}
if (rem != 0)
sum[i++] = rem;
--i;
printf("Sum of two binary numbers: ");
while (i >= 0)
printf("%d", sum[i--]);
return 0;
}
此处结果存储为int。我想将它存储在long int中,因为我需要将此总和用于下一个添加操作。
如何在sum
是操作数之一的情况下执行下一个加法运算? sum
在int中,另一个操作数在long int中。
答案 0 :(得分:1)
将其作为字符存储我想要做什么
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <string.h>
int main() {
long int binary1;
long int binary2 = 0001;
int i = 0, rem = 0;
char sum[20];
printf("Enter binary number: ");
scanf("%ld", &binary1);
while (binary1 != 0 || binary2 != 0) {
sum[i++]=(binary1 % 10 + binary2 % 10 + rem) % 2 > 0 ? '1' : '0';
rem =(binary1 % 10 + binary2 % 10 + rem) / 2;
binary1 = binary1 / 10;
binary2 = binary2 / 10;
}
if (rem != 0)
sum[i++] = rem;
--i;
printf("Sum of two binary numbers: ");
while (i >= 0)
printf("%c", sum[i--]);
printf("\n");
return 0;
}
答案 1 :(得分:1)
你的问题是那个
long int binary1=1011;
将使用1011 dec
加载您的变量,1111110011 bin
您可以使用标准加法运算符但不同的加载/打印操作。如果您想坚持 DCB (十进制编码二进制)编码(类似于 BCD 二进制编码的十进制),那么您需要重写所有数学运算。我认为更简单:
long int bin2dec(long int bin) // DCB -> binary
{
long int x,m;
for (m=1;m<bin;m*=10);
for (x=0;m;m/=10)
{
x<<=1;
x+=bin/m;
bin%=m;
}
return x;
}
long int dec2bin(long int dec) // binary -> DCB
{
long int x,m;
for (m=1;m<dec;m<<=1);
for (x=0;m;m>>=1)
{
x*=10;
x+=dec/m;
dec&=m-1;
}
return x;
}
void main()
{
long int b1=1011;
long int b2= 1;
long int b3= 100;
long int sum;
sum = dec2bin(bin2dec(b1)+bin2dec(b2)+bin2dec(b3));
// here print the sum or whatever
}
重点是在数学运算之前将 DCB 转换为标准二进制表示,然后将结果转换回 DCB 进行打印。