Ожидается "мусор" с 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);
}