AND,OR或XOR 127

时间:2019-02-05 09:37:55

标签: c

程序应将具有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

1 个答案:

答案 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);
}