기존 프로그램에서 배우려고 할 때 다음 두 줄의 코드가 무엇을하려고하는지 이해할 수 없었습니다.코드 두 줄의 기능
for(i=0;0==(x&1);++i)x>>=1;
if(0==(x-=y)) return y<<i;
모든 설명을 이해할 수 있습니다.
기존 프로그램에서 배우려고 할 때 다음 두 줄의 코드가 무엇을하려고하는지 이해할 수 없었습니다.코드 두 줄의 기능
for(i=0;0==(x&1);++i)x>>=1;
if(0==(x-=y)) return y<<i;
모든 설명을 이해할 수 있습니다.
for(i=0;0==(x&1);++i)x>>=1
정수 x
에서
if(0==(x-=y)) return y<<i;
뺍 y
에 1
설정 최하위 비트를 찾아 내고, 그 결과가 0이면 y
가 i
하여 (더 상위 비트를 향해) 위에 이동 반환 비트.
첫 번째 비트가 최하위 비트 (가장 오른쪽) –
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이면 코드는 y
을 i
비트만큼 왼쪽으로 시프트합니다.
인터뷰 질문입니까?
< < 및 >> 연산자와 &도 모두 비트 연산입니다.
피상적으로, 첫 번째 것은 1 비트를 찾을 때까지 오른쪽으로 시프트하는 것처럼 보이지만 파괴적입니다.
다른 하나는 상당히 혼란 스럽습니다.
그러나 더 많은 컨텍스트가 없으면 프로그램이 무엇을하려고하는지 명확하지 않습니다.
x
이 위치 개수만큼 왼쪽으로 시프트 된 y
인 경우 x
이 반환됩니다.
즉, x = 01010000
과 y = 00000101
인 경우 x
을 반환합니다. 질문에 조건이 충족되지 않으면 반환 할 내용을 추측 할 정보가 없습니다.
조건이 충족되지 않으면 함수는 무엇을 반환합니까? –