2010-07-27 5 views
5

기존 프로그램에서 배우려고 할 때 다음 두 줄의 코드가 무엇을하려고하는지 이해할 수 없었습니다.코드 두 줄의 기능

for(i=0;0==(x&1);++i)x>>=1; 


if(0==(x-=y)) return y<<i; 

모든 설명을 이해할 수 있습니다.

+0

조건이 충족되지 않으면 함수는 무엇을 반환합니까? –

답변

9
for(i=0;0==(x&1);++i)x>>=1 

정수 x에서

if(0==(x-=y)) return y<<i; 

y1 설정 최하위 비트를 찾아 내고, 그 결과가 0이면 yi하여 (더 상위 비트를 향해) 위에 이동 반환 비트.

+1

첫 번째 비트가 최하위 비트 (가장 오른쪽) –

4

for(i=0;0==(x&1);++i)x>>=1;

x>>=1이 코드가 올바른 장소 x의 비트를 시프트한다. 이것은 0==(x&1)이 참일 때까지 계속됩니다. 즉, x의 가장 오른쪽 비트가 0입니다. i은 이동 된 비트 수입니다.

if(0==(x-=y)) return y<<i;

이 코드는 x에서 y 뺍니다. 그런 다음 x이 0이면 코드는 yi 비트만큼 왼쪽으로 시프트합니다.

0

인터뷰 질문입니까?

< < 및 >> 연산자와 &도 모두 비트 연산입니다.

피상적으로, 첫 번째 것은 1 비트를 찾을 때까지 오른쪽으로 시프트하는 것처럼 보이지만 파괴적입니다.

다른 하나는 상당히 혼란 스럽습니다.

그러나 더 많은 컨텍스트가 없으면 프로그램이 무엇을하려고하는지 명확하지 않습니다.

0

x이 위치 개수만큼 왼쪽으로 시프트 된 y 인 경우 x이 반환됩니다.

즉, x = 01010000y = 00000101 인 경우 x을 반환합니다. 질문에 조건이 충족되지 않으면 반환 할 내용을 추측 할 정보가 없습니다.

관련 문제