unsigned long set;
/*set is after modified*/
set >>= 1;
커널 시스템 호출에서 이것을 찾았지만 이해가되지 않습니다. 어떻게 작동합니까?
발현 set >>= 1;
수단 set = set >> 1;
의 오른쪽 시프트 비트 set
에 의해 1
(자기 할당 형태 >>
비트 오른쪽 시프트 연산자 체크 비트 시프트 연산자 ).
다음과 같다고 가정합니다 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
(주 : 그하지 의미 않습니다 >>
와 /
모두 동일)
마찬가지로 <<=
왼쪽 시프트에 대한 연산자가 있고 사용 가능한 다른 비트 연산자 및 복합 할당 연산자 를 확인하고 섹션 : 비트 식 및 차이점 : 부호 / 산술 시프트 및 부호없는 시프트도 확인 합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다