Что делает оператор? - PullRequest
       1

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

42 голосов
/ 17 октября 2010

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

#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;
}       

Ответы [ 3 ]

67 голосов
/ 17 октября 2010

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

Например:

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

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

Оператор побитового НЕ обладает интересным свойством, заключающимся в том, что при применении к числам, представленным дополнением до двух , он меняет знак числа и затем вычитает один (как вы можете видеть в приведенном выше примере).

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

16 голосов
/ 17 октября 2010

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

11 голосов
/ 17 октября 2010

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

010011101

возвращает вывод:

101100010

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...