web-dev-qa-db-fra.com

Que fait ~ opérateur?

J'ai récemment vu l'opérateur ci-dessus dans un code, je l'ai cherché sur Google mais je n'ai rien trouvé.Le code est ci-dessous.Veuillez décrire ce que fait réellement cet opérateur?

#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;
}       
42
Fahad Uddin

L'opérateur ~ En C++ (et d'autres langages de type C comme C et Java) effectue une opération NOT au niveau du bit - tous les 1 bits de l'opérande sont définis sur 0 et tous les 0 les bits de l'opérande sont mis à 1. En d'autres termes, il crée le complément du nombre d'origine.

Par exemple:

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)

Dans votre exemple, ch=~((ch^i)) effectue un NOT au niveau du bit sur XOR au niveau du bit de ch et i puis affecte le résultat à ch.

L'opérateur NOT au niveau du bit a une propriété intéressante qui, lorsqu'il est appliqué sur des nombres représentés par complément à deux , il modifie le signe du nombre, puis en soustrait un (comme vous pouvez le voir dans l'exemple ci-dessus).

Vous voudrez peut-être vous familiariser avec les différents opérateurs du langage C++ car il est difficile de rechercher des opérateurs sur les moteurs de recherche. Mieux encore, vous pouvez obtenir n bon livre C++ qui vous renseignera sur les opérateurs C++.

68
In silico

L'opérateur ~ inverse tous les bits. Alors 10000001 devient 01111110.

17
JoshD

Il s'agit de l'opérateur de complément au niveau du bit. Compte tenu de l'entrée

010011101

renvoie la sortie:

101100010

12
Erkan Haspulat