在c

时间:2017-01-29 20:42:28

标签: c math

我有一个长二进制形式的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中。

2 个答案:

答案 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 进行打印。