C의 칠드 연산자
ELF 해싱 알고리즘에서 사용되는 칠드 연산자를 봤는데, 어떤 역할을 하는지 궁금하네요. (이 코드는 영구적으로 혼란스러움에서 온 것입니다.)
unsigned elf_hash ( void *key, int len )
{
unsigned char *p = key;
unsigned h = 0, g;
int i;
for ( i = 0; i < len; i++ ) {
h = ( h << 4 ) + p[i];
g = h & 0xf0000000L;
if ( g != 0 )
h ^= g >> 24;
h &= ~g;
}
return h;
}
그~
연산자는 비트 단위 NOT이며, 이진수의 비트를 반전시킵니다.
NOT 011100
= 100011
~
는 비트 단위 NOT 연산자입니다.오퍼랜드의 비트를 반전시킵니다.
예를 들어 다음과 같습니다.
char b = 0xF0; /* Bits are 11110000 */
char c = ~b; /* Bits are 00001111 */
칠드 문자는 정수의 모든 비트를 반전하는 연산자로 사용됩니다(비트 단위로는 NOT).
예를 들어 다음과 같습니다.~0x0044 = 0xFFBB
.
Tilde 연산자(~)는 비트 단위 NOT 연산자라고도 하며, 인수로서 임의의 이진수를 보완합니다.피연산자가 10진수일 경우 피연산자는 이를 2진수로 변환하고 자신의 보완 연산을 수행합니다.
보를 계산하려면 모든 자리 [0-->1] 및 [1-->0]를 반전시키면 됩니다. 예: 0101 = 5; ~(0101) = 1010.tilde 연산자 사용: 1.마스킹 동작에서 사용됩니다.마스크는 레지스터 내부의 값을 설정 및 리셋하는 것을 의미합니다(ex:
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]의 값에만 적용됩니다.
감사합니다...도움이 되십니까?
이것은 비트 단위 NOT 연산자입니다.숫자 100110 -> 011001의 모든 비트가 플립됩니다.
이것은 비트 단위 NOT 연산자입니다.정수값의 모든 비트를 반전합니다.
언급URL : https://stackoverflow.com/questions/7207391/the-tilde-operator-in-c
'programing' 카테고리의 다른 글
Vue 스크롤 div to top inside 메서드 (0) | 2022.05.28 |
---|---|
Nuxt에서 API 키를 보호하고 확인하는 방법 (0) | 2022.05.28 |
왜 'int'는 C++에서는 정상적으로 컴파일되지만 C++에서는 컴파일되지 않는가? (0) | 2022.05.28 |
구조물을 C 또는 C++로 반환하는 것이 안전한가? (0) | 2022.05.27 |
변수를 기반으로 Vue 필터 선택 (0) | 2022.05.27 |