我一直在进行一个项目,在该项目中,我们需要将名称的字母转换为它们的二进制等价形式。

A部分要求我们:


  在字母的每个字节中按字母“ 0”或“ 1”显示(写入)每个位
  您的姓氏,例如


B部分要求我们:


  使用输入名称中的第一个字符作为遮罩
  (按位或)其他字符的掩码并显示出来
  就像在A部分那样


我的A部分代码可以正常工作并输出正确的二进制序列。

输出:http://imgur.com/kAAhHyc

不幸的是,我的代码似乎不适用于B部分。

我的代码:http://imgur.com/cKmQzyS

#include <stdio.h>
#include <string.h>

main() {
    int i;
    int len;
    char name[20];
    char len_str[20];
    char a;
    int x = 0;
    int num;
    int num2;
    int y;
    char  a1;
    char a2;
    int z;
    int num3;

    write(1, "Enter your name: ", 17);
    len = read(0, name, 20);
    len--;

    num = len;
    num2 = len;
    num3 = len;
/* part 1--------------------------------------*/
    while (num > 0) {
    a = name[x];
    printf(&a);
    printf(" ");

    int mask = 128;
    while (mask > 0) {
        printf("%d", (a & mask) > 0);
        printf(" ");
        mask >>= 1;
    }
    x = x + 1;
    printf("\n");
    num--;

    }

    printf("\n");

/* part 2--------------------------------------*/
    y = 0;
    while (num2 > 0) {
    a1 = name[y];
    int mask2 = name[0];
    printf("0");
    printf(" ");
    while (mask2 > 0) {
        printf("%d", (a1 | mask2) > 0);
        printf(" ");
        mask2 >>= 1;
        a1 <<= 1;
    }
    y = y + 1;
    printf("\n");
    num2--;
    }
    printf("\n");

}


从代码和输出中可以看到(A部分输出是第一个二进制块,B部分是第二个二进制块),我在上面张贴的内容似乎是错误的。我同时移动了掩码和字母中的位,但得到的输出不正确。我将AND“&”更改为OR“ |”。掩码是名称的第一个字母,即name [0],而不是我在A部分中看到的128。即使在相同方向上将两个位移位时,即mask2 >> = 1和a1 >> =我仍然得到错误的输出。有人可以帮助我解决这个问题。我知道我已经接近了,这一定是导致我受阻的一个小错误。

谢谢

最佳答案

将代码显示为函数中的二进制输出,将其称为void showBinary(char ch)

第一部分说对showBinary(name[x])中的x做[0, strlen(name))

第二部分说对showBinary(name[0] | name[x])中的x执行[1, strlen(name))

在这两个任务中,仅“ showBinary”操作的输入和调用会更改。 “ showBinary”的实际代码/操作是相同的。

使用一个函数来命名此操作并对代码进行分组可以使区分更加清晰,并使从逻辑角度更容易识别出差异。在这种情况下,差异是在第二种情况下“ showBinary”函数的循环内对[cc]的[不正确]更改。

08-16 08:09