61 votes

Que fait l'opérateur tilde(~) ?

J'ai récemment vu l'opérateur ci-dessus dans un code, j'ai cherché sur Google, mais je n'ai rien trouvé. Le code est ci-dessous.

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

91voto

In silico Points 30778

El ~ en C++ (et dans d'autres langages similaires au C comme C et Java) effectue un opération NOT par bit - tous les bits 1 de l'opérande sont mis à 0 et tous les bits 0 de l'opérande sont mis à 1. En d'autres termes, il crée la fonction complément du numéro 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 par bit sur le XOR par bit de ch y i puis affecte le résultat à ch .

L'opérateur bitwise NOT a une propriété intéressante : lorsqu'il est appliqué aux nombres représentés par complément à deux il change le signe du nombre et soustrait ensuite un (comme vous pouvez le voir dans l'exemple ci-dessus).

Vous pouvez 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 un bon livre sur le C++ qui vous renseignera sur les opérateurs C++.

20voto

JoshD Points 7303

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

13voto

Erkan Haspulat Points 4707

Il s'agit de l'opérateur de complémentation binaire. Étant donné l'entrée

010011101

renvoie la sortie :

101100010

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X