【发布时间】:2014-09-28 06:04:18
【问题描述】:
我一直在从事一个项目,在该项目中,我们需要将名称的字母转换为其二进制等价物。
A 部分要求我们:
在每个字节中按字母“0”或“1”显示(写入)每个位 您的姓氏,例如
B 部分要求我们:
使用输入名称的第一个字符作为掩码 (按位或)其他字符的掩码并将它们显示出来 就像 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“&”更改为OR“|”。掩码是名称的第一个字母,即名称[0],而不是我在 A 部分中的 128。即使我在两个方向上移动位,即 mask2 >>= 1 和 a1 >> = 我仍然得到错误的输出。有人可以帮助我解决这个问题。我知道我已经很接近了,一定是一些小错误阻碍了我。
谢谢
【问题讨论】: