Operator tyldy (~) nazywany również operatorem bitowym NOT, jako argument wykonuje uzupełnienie dowolnej liczby binarnej. Jeśli operand NIE jest liczbą dziesiętną, to przekształca go jako binarny i wykonuje operację uzupełnienia.
Aby obliczyć dopełnienie, po prostu odwróć wszystkie cyfry [0 -> 1] i [1 -> 0] Np .: 0101 = 5; ~ (0101) = 1010. Użycie operatora tyldy: 1. Jest używany w operacji maskowania, maskowanie oznacza ustawianie i resetowanie wartości wewnątrz dowolnego rejestru. na przykład:
char mask ;
mask = 1 << 5 ;
Ustawi maskę na wartość binarną 10000, a ta maska może być użyta do sprawdzenia wartości bitowej obecnej w innej zmiennej.
int a = 4;
int k = a&mask ; if the 5th bit is 1 , then k=1 otherwise k=0.
Nazywa się to maskowaniem bitów. 2. Aby znaleźć binarny odpowiednik dowolnej liczby za pomocą właściwości maskujących.
#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 ;
k==0?printf("0"):printf("1");
}
}
Dane wyjściowe: 10 dziesiętne jest takie samo jak 00001010
Moja obserwacja : dla maksymalnego zakresu dowolnego typu danych, uzupełnienie podaje wartość ujemną pomniejszoną o 1 do dowolnej odpowiadającej wartości. np.
~ 1 --------> -2
~ 2 ---------> -3
i tak dalej ... Pokażę ci tę obserwację za pomocą małego fragmentu kodu
#include<stdio.h>
int main()
{
int a , b;
a=10;
b=~a;
printf("%d\n",a+~b+1);
return 0;
}
Output: 0
Uwaga: dotyczy to tylko zakresu typu danych. oznacza, że dla typu danych int ta reguła będzie miała zastosowanie tylko do wartości zakresu [-2 147 483 648 do 2 147 483 647].
Dziękuję ..... Niech to ci pomoże