程序应将具有127的字符串中的每个字符进行AND OR和XOR并显示结果。
我的代码适用于AND,但是它显示XOR的垃圾值。
void main(){
char str[]="Hello World";
int i,len;
len = strlen(str);
for(i=0;i<len;i++){
printf("%c",str[i]&127);
}
printf("\n");
for(int i=0;i<len;i++){
printf("%c",str[i]^127);
}
printf("\n");
for(int i=0;i<len;i++){
printf("%c",str[i]|127);
}
printf("\n");
}
expected result:Hello World
Hello World
Hello World
答案 0 :(得分:7)
预计使用OR或XOR会看到“垃圾”。
您的字符串Hello World
是纯ASCII,因此由编码值小于127
的字符组成。
与127
进行按位AND不会更改该值,因此您将看到Hello World
。
在您的情况下,与127
进行按位或运算会将所有值设置为127
。对于其他语言的字符,您可能会获得127
以上的值。
与127
的按位XOR运算将反转每个字符的7个低位,从而导致其他字符可能不是可打印字符。
这意味着当您打印字符时,您会看到“垃圾”。
要了解按位逻辑运算的结果,可以执行以下操作:
for(int i=0;i<len;i++){
int original, modified;
original = str[i];
modified = str[i]^127;
printf("i %d char %c orig %02x mod %02x\n", i, original, original, modified);
}