틸드 연산자 (~) 는 비트 NOT 연산자 라고도 하며 이진수 의 1의 보수 를 인수로 수행합니다. NOT에 대한 피연산자가 10 진수이면 2 진수로 변환하고 1의 보수 연산을 수행합니다.
1의 보수를 계산하려면 모든 숫자 [0-> 1]과 [1-> 0]을 반전하기 만하면됩니다. Ex : 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 데이터 유형의 경우이 규칙은 범위 [-2,147,483,648 ~ 2,147,483,647]의 값에만 적용됩니다.
감사합니다 ..... 이것이 당신을 도울 수 있습니다