O operador Til (~), também chamado de operador NOT bit a bit, executa o complemento de qualquer número binário como argumento. Se o operando para NÃO for um número decimal, ele o converte em binário e realiza a operação de complemento de um.
Para calcular o complemento de um, basta inverter todos os dígitos [0 -> 1] e [1 -> 0] Ex: 0101 = 5; ~ (0101) = 1010. Uso do operador til: 1. É usado na operação de mascaramento, mascaramento significa definir e redefinir os valores dentro de qualquer registro. por ex:
char mask ;
mask = 1 << 5 ;
Ele definirá a máscara para um valor binário de 10000 e esta máscara pode ser usada para verificar o valor do bit presente dentro de outra variável.
int a = 4;
int k = a&mask ; if the 5th bit is 1 , then k=1 otherwise k=0.
Isso é chamado de mascaramento de bits. 2. Encontrar o equivalente binário de qualquer número usando propriedades de mascaramento.
#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");
}
}
Saída: Decimal 10 é igual a 00001010
Minha observação : para o intervalo máximo de qualquer tipo de dados, o complemento de um fornece o valor negativo diminuído em 1 para qualquer valor correspondente. ex:
~ 1 --------> -2
~ 2 ---------> -3
e assim por diante ... Vou mostrar esta observação usando um pequeno trecho de código
#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
Nota: Isso é válido apenas para o intervalo de tipo de dados. significa que para o tipo de dados int, essa regra será aplicável apenas para o valor do intervalo [-2.147.483.648 a 2.147.483.647].
Obrigado ..... Que isso te ajude