Оператор Тильди (~), який також називається побітовим оператором NOT, виконує своє доповнення будь-якого двійкового числа як аргумент. Якщо операнд НЕ є десятковим числом, тоді він перетворює його у двійковий і виконує операцію доповнення.
Для обчислення свого доповнення просто інвертуйте всі цифри [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 ; // Masking
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; // b-----> -11
printf("%d\n",a+~b+1);// equivalent to a-b
return 0;
}
Output: 0
Примітка. Це справедливо лише для діапазону типів даних. означає, що для типу даних int це правило застосовуватиметься лише до значення діапазону [-2,147,483,648 до 2,147,483,647].
Дякую ..... Нехай це допоможе тобі