이 ">>=" 연산자는 C에서 무엇을 의미합니까?
unsigned long set;
/*set is after modified*/
set >>= 1;
커널 시스템 호출에서 이걸 찾았는데 이해가 안 되는데, 어떻게 작동하나요?
그 표현은set >>= 1;
수단set = set >> 1;
그것은 오른쪽 시프트 비트입니다.set
타고1
(자체 할당 형식:>>
Bitwise 오른쪽 Shift 연산자를 선택합니다.
만약에set
다음과 같습니다.
BIT NUMBER 31 n=27 m=17 0
▼ ▼ ▼ ▼
set = 0000 1111 1111 1110 0000 0000 0000 0000
그다음에set >> = 1;
변수set
다음이 됩니다.
BIT NUMBER 31 n=26 m=16 0
▼ ▼ ▼ ▼
set = 0000 0111 1111 1111 0000 0000 0000 0000
비트 수가 이동했습니다.
흥미로운 점에 유의하십시오.왜냐면set
이라unsigned long
그래서 이것은>>
연산은 논리적 시프트(부호 시프트)여야 합니다. 논리적 시프트는 숫자의 부호 비트를 보존하지 않습니다.
또한 모든 비트를 오른쪽으로 이동하기 때문에(중요한 숫자보다 작은 경우도 있음) 오른쪽 이동 하나는 = 숫자를 2로 나눕니다.
이 코드를 확인합니다(마지막 포인트를 보여주기 위해).
int main(){
unsigned long set = 268304384UL;
set >>= 1;
printf(" set :%lu \n", set);
set = 268304384UL;
set /= 2;
printf(" set :%lu \n", set);
return 1;
}
출력:
set :134152192
set :134152192
(참고: 그것은 의미하지 않습니다.>>
그리고./
둘 다 동일)
마찬가지로 연산자가 있습니다.<<=
왼쪽 시프트의 경우 다른 사용 가능한 비트와이즈 연산자와 복합 할당 연산자를 확인하고, 섹션: 비트 표현식 및 부호 없는 시프트와 부호 없는 시프트 간의 차이도 확인합니다.
이 "우측 이동"은 값을 1비트씩 바꿉니다.정수의 모든 비트를 1씩 오른쪽으로 이동하면 이진법이 기본 2 번호 체계이기 때문에 효과적으로 "2로 나눕니다".
이진법으로 숫자 12를 사용한다고 가정해 보십시오.
1100 = 12 in binary
110 = 6 in binary (1100 right-shifted)
10자리 숫자의 모든 자리를 하나씩 오른쪽으로 이동하는 것과 마찬가지로 10으로 나눕니다.
모든 이항 연산자는 다음과 결합할 수 있습니다.=
모든 경우
dest op= expression
와 동등합니다.
dest = dest op expression
(경우 제외)dest
부작용이 있습니다. 단 한 번 발생합니다.)
그래서 이것은 의미합니다.
set>>=1;
다음과 같습니다.
set = set >> 1;
부터>>
이항 오른쪽 이동 연산자이며, 값을 이동하는 것을 의미합니다.set
딱 1비트 차이로.
이것은 비트를 1씩 오른쪽으로 이동시키며, 이는 2로 나눗셈하는 것과 같습니다.비트 이동에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/f96c63ed(v=vs.80).aspx 을 참조하십시오.
위의 명령은 오른쪽 시프트를 1비트씩 수행합니다.이 링크 http://www.cprogramming.com/tutorial/bitwise_operators.html 에서 c의 비트 연산을 참조하십시오.
언급URL : https://stackoverflow.com/questions/17769948/what-does-this-operator-mean-in-c
'programing' 카테고리의 다른 글
vuejs 구성 요소에서 vuex 상태 변경을 확인하는 중 (0) | 2023.07.03 |
---|---|
Git - 병합하는 동안 파일 무시 (0) | 2023.07.03 |
PL/SQL 스크립트 내부의 로컬 함수 (0) | 2023.06.28 |
루비 문자열 내에서 문자열 "\n"을 제거하려면 어떻게 해야 합니까? (0) | 2023.06.28 |
피벗에서 (null) 값을 출력 0으로 바꾸는 방법 (0) | 2023.06.28 |