Оператор тильды (~), также называемый побитовым оператором НЕ, выполняет дополнение любого двоичного числа в качестве аргумента. Если операнд НЕ является десятичным числом, он преобразует его в двоичное и выполняет операцию дополнения до единицы.
Чтобы вычислить дополнение, просто переверните все цифры [0 -> 1] и [1 -> 0] Пример: 0101 = 5; ~ (0101) = 1010. Использование оператора тильды: 1. Он используется в операции маскирования. Маскирование означает установку и сброс значений внутри любого регистра. например:
char mask ;
mask = 1 << 5 ;
Он установит маску на двоичное значение 10000, и эту маску можно использовать для проверки битового значения, присутствующего внутри другой переменной.
int a = 4;
int k = a&mask ; if the 5th bit is 1 , then k=1 otherwise k=0.
Это называется маскированием битов. 2. Найти двоичный эквивалент любого числа с помощью свойств маскировки.
#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");
}
}
Вывод: десятичное число 10 такое же, как 00001010
Мое наблюдение : для максимального диапазона любого типа данных одно дополнение обеспечивает отрицательное значение, уменьшенное на 1 до любого соответствующего значения. пример:
~ 1 --------> -2
~ 2 ---------> -3
и так далее ... Я покажу вам это наблюдение, используя небольшой фрагмент кода
#include<stdio.h>
int main()
{
int a , b;
a=10;
b=~a;
printf("%d\n",a+~b+1);
return 0;
}
Output: 0
Примечание. Это действительно только для диапазона типов данных. означает, что для типа данных int это правило будет применяться только для значения диапазона [-2 147 483 648 до 2 147 483 647].
Спасибо ..... Может это вам поможет