【问题标题】:Cannot print out Binary calculation无法打印出二进制计算
【发布时间】:2020-02-14 14:15:42
【问题描述】:

我有一个框架代码来获取两个数字的输入并将它们相加,但是我不知道如何写出将输入转换为二进制数的部分代码

例如,如果我输入 ./calc.c 5+5。数字是 10,二进制是 00001010。 但我不知道如何使用代码将十进制转换为二进制。

有什么帮助吗?

谢谢。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv){

  int dec1 = atoi(argv[1]);
  char op = argv[2][0]; 
  int dec2 = atoi(argv[3]);
  int i;


  printf("Called with dec1: %d op: %c dec2: %d\n", dec1, op, dec2);


  if(dec1 & 1){

    printf("bit is 1\n");
  }
  int sum = dec1 + dec2;

  if (op == '+'){

    for (i=0; i < 4; i++){

      printf("%d\n", i); 
    }
  }
  printf("\n");
  return 0;
}

【问题讨论】:

  • 你知道如何用铅笔和一张纸将十进制转换为二进制吗?

标签: c binary decimal


【解决方案1】:

一种解决方案是使用位掩码检查每个单独位的值。请注意,在大多数系统上,整数通常是 4 个字节,但为了您的示例,我们只考虑最右边的 8 位。另外,我将假设 sum 已经正确计算,因为您的问题是关于以二进制打印整数而不是解析方程或算术。

让我们创建一个等效于10000000 的位掩码,等于128,然后旋转它。然后我们可以用按位与检查sum,看看是否每个位都设置了。

int bitmask = 128;
for (int i = 0; i < 8; i++ ) {
    if (sum & bitmask)
        printf("1");
    else
        printf("0");
    bitmask = bitmask >> 1;
}

printf("\n");

此解决方案从左到右检查sum 中的每个位,以查看它是否已设置。如果是,则打印 1,否则,打印 0。这是以二进制形式打印整数的一种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多