我一直致力于一个项目,我们需要将名称的字母转换成二进制等价物。
A部分要求我们:
按字母表显示(写入)每个位' 0'或者' 1'在每个字节中 你的姓氏,例如
B部分要求我们:
使用输入名称中的第一个字符作为掩码 其他字符的(按位OR)掩码并显示出来 像A部分那样。
我的A部分代码工作并输出正确的二进制序列。
不幸的是,我的代码似乎不适用于B部分。
#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&#34;&amp;&#34;到一个OR&#34; |&#34;。掩码是名称的第一个字母,即名称[0],而不是我在A部分中的128.即使我在两个位置移动相同方向的位,即mask2&gt;&gt; = 1和a1 &gt;&gt; =我仍然得到错误的输出。有人可以协助我解决这个问题。我知道我很接近,这是一个让我失望的小错误。
谢谢
答案 0 :(得分:1)
放置代码以在函数中显示二进制输出,将其命名为void showBinary(char ch)
。
第一部分是对showBinary(name[x])
中的x进行[0, strlen(name))
。
第二部分是对showBinary(name[0] | name[x])
中的x进行[1, strlen(name))
说。
在这两个任务中,仅“showBinary”操作的输入和调用会发生变化。 “showBinary”的实际代码/操作是相同的。
使用函数命名此操作并对代码进行分组可以使区分更加清晰,并且可以从逻辑角度更容易地识别差异。在这种情况下,差异是第二种情况下“showBinary”函数循环中<{1}} 内部[{1}} 的[不正确]更改。