Подтвердить что ты не робот

Что делает оператор?

Недавно я видел вышеупомянутого оператора в коде, я искал его, но ничего не нашел. Код ниже. Пожалуйста, опишите, что на самом деле делает этот оператор?

#include<stdio.h>
int main()
{
    unsigned long int i=0;
     char ch;
    char name1[20],name2[20];
    FILE *fp,*ft;
    printf("ENTER THE SOURCE FILE:");
    gets(name1);
    printf("ENTER THE DESTINATION FILE:");
    gets(name2);
    fp=fopen(name1,"r");
    ft=fopen(name2,"w");
    if(fp==NULL)
    {
        printf("CAN,T OPEN THE FILE");
    }
    while(!feof(fp))
    {
         ch=getc(fp);
         ch=~((ch^i));/*<--Here*/
        i+=2;
        if(i==100000)
        {
             i=0;
        }
     putc(ch,ft);
    }
    fclose(fp);
    fclose(ft);
    return 0;
}       
4b9b3361

Ответ 1

Оператор ~ в С++ (и другие C-подобные языки, такие как C и Java) выполняет побитовое НЕ-операцию - все 1 бит в операнде установлены в 0 и все 0 бит в операнде равны 1. Другими словами, он создает дополнение к исходному номеру.

Например:

10101000 11101001 // Original  (Binary for -22,295 in 16-bit two complement)
01010111 00010110 // ~Original (Binary for  22,294 in 16-bit two complement)

В вашем примере ch=~((ch^i)) выполняет побитовое NOT на побитовом XOR ch и i, затем присваивает результат ch.

Побитовый оператор NOT имеет интересное свойство, которое при применении к числам, представленным двумя дополнениями, изменяет знак числа и затем вычитает один ( как вы можете видеть в приведенном выше примере).

Возможно, вам захочется ознакомиться с различными операторами языка С++, поскольку трудно найти операторов в поисковых системах. Еще лучше, вы можете получить хорошую книгу на С++, которая расскажет вам о операторах С++.

Ответ 2

Оператор ~ инвертирует все биты. Итак, 10000001 становится 01111110.

Ответ 3

Это побитовый оператор дополнения. Учитывая ввод

010011101

возвращает результат:

101100010