И, ИЛИ, XOR строка с 127 - PullRequest
       1

И, ИЛИ, XOR строка с 127

0 голосов
/ 05 февраля 2019

Программа должна AND ИЛИ и XOR каждый символ в строке с 127 и отображать результат.

Мой код работает для 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 голосов
/ 05 февраля 2019

Ожидается "мусор" с OR или XOR.

Ваша строка Hello World является чистым ASCII, поэтому она состоит из символов со значениями кодировки, меньшими 127.

Побитовое И с 127 не изменяет значение, поэтому вы увидите Hello World.

Побитовое ИЛИ с 127 установит все значения на 127 в вашем случае.Для символов из других языков вы можете получить значения выше 127.

Побитовое XOR с 127 будет инвертировать 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...