チルダ演算子(〜)はビット単位のNOT演算子とも呼ばれ、任意の2進数の1の補数を引数として実行します。NOTのオペランドが10進数の場合は、それを2進数に変換し、1の補数演算を実行します。
1の補数を計算するには、単純にすべての数字[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進数の10は00001010と同じ
私の観察:任意のデータ型の最大範囲について、1の補数は、対応する値に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データ型の場合、このルールはrange [-2,147,483,648〜2,147,483,647]の値にのみ適用されます。
ありがとう.....これがあなたを助けますように