L'opérateur Tilde (~) également appelé opérateur NOT au niveau du bit, effectue son complément de n'importe quel nombre binaire comme argument. Si l'opérande NOT est un nombre décimal, il le convertit en binaire et effectue l'opération de complément à un.
Pour calculer son complément, il suffit d'inverser tous les chiffres [0 -> 1] et [1 -> 0] Ex: 0101 = 5; ~ (0101) = 1010. Utilisation de l'opérateur tilde: 1. Il est utilisé dans l'opération de masquage, le masquage signifie la définition et la réinitialisation des valeurs à l'intérieur de n'importe quel registre. par ex:
char mask ;
mask = 1 << 5 ;
Il définira le masque sur une valeur binaire de 10000 et ce masque peut être utilisé pour vérifier la valeur de bit présente dans une autre variable.
int a = 4;
int k = a&mask ; if the 5th bit is 1 , then k=1 otherwise k=0.
C'est ce qu'on appelle le masquage des bits. Pour trouver l'équivalent binaire de n'importe quel nombre en utilisant les propriétés de masquage.
#include<stdio.h>
void equi_bits(unsigned char);
int main()
{
unsigned char num = 10 ;
printf("\nDecimal %d is same as binary ", num);
equi_bits(num);
return 0;
}
void equi_bits(unsigned char n)
{
int i ;
unsigned char j , k ,mask ;
for( i = 7 ; i >= 0 ; i--)
{
j=i;
mask = 1 << j;
k = n&mask ; // Masking
k==0?printf("0"):printf("1");
}
}
Sortie: le décimal 10 est identique à 00001010
Mon observation : pour la plage maximale de tout type de données, le complément à un fournit la valeur négative diminuée de 1 à toute valeur correspondante. ex:
~ 1 --------> -2
~ 2 ---------> -3
et ainsi de suite ... Je vais vous montrer cette observation en utilisant un petit extrait de code
#include<stdio.h>
int main()
{
int a , b;
a=10;
b=~a; // b-----> -11
printf("%d\n",a+~b+1);// equivalent to a-b
return 0;
}
Output: 0
Remarque: Ceci n'est valable que pour la plage de types de données. signifie que pour le type de données int, cette règle ne sera applicable que pour la valeur de la plage [-2 147 483 648 à 2 147 483 647].
Merci ..... Que cela vous aide