¿Qué hace el ~ operador?

Hace poco vi el operador anterior en un código, busqué en Google, pero no encontré nada. El código está a continuación. Por favor, describe qué hace realmente este operador.

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

El operador ~ en C ++ (y otros lenguajes similares a C como C y Java) realiza una operación NOT bit a bit – todos los 1 bits en el operando se establecen en 0 y todos los 0 bits en el operando se establecen en 1. En otras palabras , crea el complemento del número original.

Por ejemplo:

 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) 

En su ejemplo, ch=~((ch^i)) realiza un NOT bit a bit en el XOR de ch de bit a bit y luego asigna el resultado a ch .

El operador NOT bit a bit tiene una propiedad interesante que cuando se aplica a los números representados por el complemento a dos , cambia el signo del número y luego lo resta (como se puede ver en el ejemplo anterior).

Es posible que desee familiarizarse con los diferentes operadores del lenguaje C ++, ya que es difícil buscar operadores en los motores de búsqueda. Mejor aún, puede obtener un buen libro de C ++ que le informará sobre los operadores de C ++.

El operador ~ invierte todos los bits. Entonces 10000001 convierte en 01111110 .

Es el operador de complemento bit a bit. Dada la entrada

010011101

devuelve el resultado:

101100010